Làm cách nào để chuyển đổi dữ liệu thành từ điển Python?

Để tóm tắt

import ast, yaml, json, timeit

descs=['short string','long string']
strings=['{"809001":2,"848545":2,"565828":1}','{"2979":1,"30581":1,"7296":1,"127256":1,"18803":2,"41619":1,"41312":1,"16837":1,"7253":1,"70075":1,"3453":1,"4126":1,"23599":1,"11465":3,"19172":1,"4019":1,"4775":1,"64225":1,"3235":2,"15593":1,"7528":1,"176840":1,"40022":1,"152854":1,"9878":1,"16156":1,"6512":1,"4138":1,"11090":1,"12259":1,"4934":1,"65581":1,"9747":2,"18290":1,"107981":1,"459762":1,"23177":1,"23246":1,"3591":1,"3671":1,"5767":1,"3930":1,"89507":2,"19293":1,"92797":1,"32444":2,"70089":1,"46549":1,"30988":1,"4613":1,"14042":1,"26298":1,"222972":1,"2982":1,"3932":1,"11134":1,"3084":1,"6516":1,"486617":1,"14475":2,"2127":1,"51359":1,"2662":1,"4121":1,"53848":2,"552967":1,"204081":1,"5675":2,"32433":1,"92448":1}']
funcs=[json.loads,eval,ast.literal_eval,yaml.load]

for  desc,string in zip(descs,strings):
    print('***',desc,'***')
    print('')
    for  func in funcs:
        print(func.__module__+' '+func.__name__+':')
        %timeit func(string)        
    print('')

Kết quả

*** short string ***

json loads:
4.47 µs ± 33.4 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
builtins eval:
24.1 µs ± 163 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)
ast literal_eval:
30.4 µs ± 299 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)
yaml load:
504 µs ± 1.29 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

*** long string ***

json loads:
29.6 µs ± 230 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)
builtins eval:
219 µs ± 3.92 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
ast literal_eval:
331 µs ± 1.89 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
yaml load:
9.02 ms ± 92.2 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

Phần kết luận. thích json hơn. tải

Trong bài viết này, chúng tôi sẽ thảo luận về các cách khác nhau để chuyển đổi một hoặc nhiều danh sách thành từ điển trong Python

Các chuyển đổi sau từ danh sách sang từ điển sẽ được đề cập ở đây,

  • Chuyển đổi Danh sách thành Từ điển có cùng giá trị
  • Chuyển đổi các mục Danh sách dưới dạng khóa trong từ điển với giá trị liệt kê
  • Chuyển đổi hai danh sách thành từ điển
  • Chuyển đổi danh sách các bộ dữ liệu thành từ điển

Chuyển đổi Danh sách thành Từ điển có cùng giá trị

Giả sử chúng ta có một danh sách các chuỗi i. e

# List of strings
listOfStr = ["hello", "at" , "test" , "this" , "here" , "now" ]

Bây giờ chúng tôi muốn tạo một từ điển với tất cả các phần tử trong danh sách này là khóa. Đối với mỗi giá trị khóa sẽ giống nhau. e. 5. Hãy xem làm thế nào để làm điều đó tôi. e

Sử dụng hiểu từ điển

quảng cáo

'''
Converting a list to dictionary with list elements as keys in dictionary
All keys will have same value
''' 
dictOfWords = { i : 5 for i in listOfStr }

Nội dung từ điển sẽ là,

hello  ::  5
here  ::  5
this  ::  5
test  ::  5
at  ::  5
now  ::  5

sử dụng chính tả. fromKeys()

'''
Converting a list to dictionary with list elements as keys in dictionary
using dict.fromkeys()
''' 
dictOfWords = dict.fromkeys(listOfStr , 1)

mệnh lệnh. fromKeys() chấp nhận một danh sách và giá trị mặc định. Nó trả về một từ điển với các mục trong danh sách dưới dạng khóa. Tất cả các mục từ điển sẽ có cùng giá trị, được chuyển vào fromkeys()

Nếu không có giá trị mặc định nào được chuyển vào fromKeys() thì giá trị mặc định cho các khóa trong từ điển sẽ là Không có

Chuyển đổi các mục Danh sách dưới dạng khóa trong từ điển với giá trị liệt kê

Giả sử chúng ta có một danh sách các chuỗi i. e

# List of strings
listOfStr = ["hello", "at" , "test" , "this" , "here" , "now" ]

Hãy tạo một từ điển từ danh sách này với các phần tử danh sách là khóa và giá trị là số nguyên từ 0 đến n-1 (n là kích thước của danh sách) i. e

'''
Converting a list to dictionary with list elements as values in dictionary
and keys are enumerated index starting from 0 i.e. index position of element in list
''' 
dictOfWords = { i : listOfStr[i] for i in range(0, len(listOfStr) ) }

Nội dung từ điển sẽ là,

________số 8_______

Chuyển đổi hai danh sách thành từ điển

Giả sử chúng ta có hai danh sách i. e

# List of strings
listOfStr = ["hello", "at" , "test" , "this" , "here" , "now" ]
    
# List of ints
listOfInt = [56, 23, 43, 97, 43, 102]

Hãy tạo một từ điển với các phần tử của listOfStr làm khóa và các phần tử của listOfInt làm giá trị bằng cách sử dụng zip() i. e

# Create a zip object from two lists
zipbObj = zip(listOfStr, listOfInt)

# Create a dictionary from zip object
dictOfWords = dict(zipbObj)

Zip() chấp nhận một số đối tượng có thể lặp lại và trả về danh sách các bộ dữ liệu. Mỗi mục trong bộ chứa một phần tử từ mỗi đối tượng có thể lặp lại
Chúng tôi đã chuyển hai đối tượng danh sách trong zip() , vì vậy nó sẽ trả về một danh sách các bộ, trong đó mỗi bộ chứa một mục nhập từ cả hai danh sách. Sau đó, chúng tôi đã tạo một đối tượng từ điển từ danh sách các bộ dữ liệu này

Nội dung từ điển là,

Dictionary from two Lists 
hello  ::  56
here  ::  43
this  ::  97
test  ::  43
at  ::  23
now  ::  102
  • Nếu độ dài của danh sách khóa nhỏ hơn danh sách giá trị thì các phần tử còn lại trong danh sách giá trị sẽ bị bỏ qua

Chuyển đổi danh sách các bộ dữ liệu thành từ điển

Giả sử chúng ta có một danh sách các bộ với hai cột trong mỗi mục i. e

'''
Converting a list to dictionary with list elements as keys in dictionary
All keys will have same value
''' 
dictOfWords = { i : 5 for i in listOfStr }
0

Chúng ta có thể chuyển trực tiếp danh sách các bộ dữ liệu này tới hàm tạo từ điển i. e

'''
Converting a list to dictionary with list elements as keys in dictionary
All keys will have same value
''' 
dictOfWords = { i : 5 for i in listOfStr }
1

Các mục trong cột đầu tiên sẽ trở thành khóa và các mục trong cột thứ hai sẽ là các giá trị trong từ điển mới. Nội dung của từ điển sẽ là,

Làm cách nào để chuyển đổi thành từ điển trong Python?

Vì từ điển python không có thứ tự nên đầu ra có thể theo bất kỳ thứ tự nào. Để chuyển đổi danh sách thành từ điển, chúng ta có thể sử dụng khả năng hiểu danh sách và tạo khóa. cặp giá trị của các phần tử liên tiếp. Cuối cùng, hãy nhập danh sách để nhập chính tả .

Làm cách nào để chuyển đổi một chuỗi thành từ điển?

Phương pháp 1. Tách chuỗi để tạo khóa. cặp giá trị của từ điển Theo phương pháp này, chuỗi đã cho sẽ được phân tích và với việc sử dụng phương thức split(), chuỗi sẽ được chia theo cách mà nó tạo ra khóa. cặp giá trị để tạo từ điển.