Tạo một từ điển mới trong Python


454

Tôi muốn xây dựng một từ điển bằng Python. Tuy nhiên, tất cả các ví dụ mà tôi thấy đang khởi tạo một từ điển từ một danh sách, v.v. ..

Làm cách nào để tạo một từ điển trống mới trong Python?

Câu trả lời:


661

Gọi dictkhông có tham số

new_dict = dict()

hoặc đơn giản là viết

new_dict = {}

39
Có sự khác biệt nào giữa dict () và {} không? Hay mọi người chỉ thích cái này hơn cái kia?
Matt

52
(Chậm hơn 6 lần?) @ Matt Rõ ràng CPython 2,7 dict () là chậm, Xem: doughellmann.com/2012/11/... Trong mọi trường hợp Tôi bắt đầu thích cú pháp constructor anyways kể từ khi tôi tìm thấy nó dễ dàng hơn để gõ và mã di chuyển giữa các lệnh và chức năng gọi.
David Wheaton

16
Tôi xác nhận sử dụng {} nhanh hơn 3 lần so với dict () trong python 3.x
Alex Azazel

8
Vâng, tôi nhận được nhanh hơn khoảng 4 lần trong python 3.6 cho {}hơn dict()và 5 lần cho []hơn list().
Hội trường Michael

10
Trong phần lớn các trường hợp, sẽ không có vấn đề gì nếu mất nhiều thời gian hơn sáu lần, vì đó vẫn là một khoảng thời gian nhỏ đáng chú ý.
hypehuman

247

Bạn có thể làm được việc này

x = {}
x['a'] = 1

107
+1 cho câu hỏi logic tiếp theo về cách thêm một yếu tố mới vào nó
Matt Klein

27

Biết cách viết một từ điển cài sẵn cũng hữu ích để biết:

cmap =  {'US':'USA','GB':'Great Britain'}

# Explicitly:
# -----------
def cxlate(country):
    try:
        ret = cmap[country]
    except KeyError:
        ret = '?'
    return ret

present = 'US' # this one is in the dict
missing = 'RU' # this one is not

print cxlate(present) # == USA
print cxlate(missing) # == ?

# or, much more simply as suggested below:

print cmap.get(present,'?') # == USA
print cmap.get(missing,'?') # == ?

# with country codes, you might prefer to return the original on failure:

print cmap.get(present,present) # == USA
print cmap.get(missing,missing) # == RU

4
Điểm tốt! Nhưng tôi nghĩ rằng bit với cxlatelàm cho câu trả lời của bạn có vẻ quá phức tạp. Tôi chỉ giữ phần khởi tạo. ( cxlatebản thân nó quá phức tạp. Bạn chỉ có thể return cmap.get(country, '?').)
Daniel Darabos

Cân nhắc sử dụng docs.python.org/2/l Library / Thay vì viết hàm dịch hoặc sử dụng .get () ở mọi nơi.
Sparr

1
Có lẽ tôi sẽ, ngoại trừ việc tài liệu này hoàn toàn mờ đối với tôi - nó thật kinh khủng. Tôi không biết họ đang bảo tôi làm gì, hay tại sao tôi nên làm điều đó. Và .get () dường như làm chính xác điều đúng - cộng với nó cực kỳ linh hoạt. Tôi chắc chắn rằng đó là một sự thiếu hiểu biết về phía tôi. Với ý nghĩ đó, câu hỏi của tôi là: tại sao phải bận tâm? Những gì được lưu ở đây, dễ dàng hơn ở đây, nhanh hơn ở đây, vv? Lợi ích chính xác là gì?
fyngyrz

1
Không liên quan, nhưng bạn nên nắm bắt một cách rõ ràng KeyErrorthay vì trần trừ (điều này sẽ bắt những thứ như KeyboardInterruptSystemExit).
Arnav Borborah

Arnav, vâng tất nhiên là bạn đúng. Chỉnh sửa cho phù hợp. Cảm ơn bạn!
fyngyrz

19
>>> dict(a=2,b=4)
{'a': 2, 'b': 4}

Sẽ thêm giá trị trong từ điển python.


15
d = dict()

hoặc là

d = {}

hoặc là

import types
d = types.DictType.__new__(types.DictType, (), {})

Sự khác biệt giữa types.DictType.__new__(types.DictType, (), {})và chỉ{}

2
Đối với bất kỳ ai đọc điều này: "giải pháp" cuối cùng là một trò đùa - bạn có thể sử dụng nó (ít nhất là trong python 2.x - sẽ không hoạt động trong py3k), nhưng không ai muốn làm điều đó vì vậy ;-)
bruno Desthuilliers

6

Vì vậy, có 2 cách để tạo ra một dict:

  1. my_dict = dict()

  2. my_dict = {}

Nhưng trong số hai tùy chọn {}này là hiệu quả hơn dict()cộng với nó có thể đọc được. KIỂM TRA TẠI ĐÂY


4
>>> dict.fromkeys(['a','b','c'],[1,2,3])


{'a': [1, 2, 3], 'b': [1, 2, 3], 'c': [1, 2, 3]}

câu hỏi nói rằng từ điển nên là một ví dụ trống mới
Wesam
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.