Làm cách nào để in các cặp khóa-giá trị của từ điển bằng python


175

Tôi muốn xuất các cặp giá trị khóa của mình từ một từ điển python như sau:

key1 \t value1
key2 \t value2

Tôi nghĩ rằng tôi có thể làm điều đó như thế này:

for i in d:
    print d.keys(i), d.values(i)

nhưng rõ ràng đó không phải là cách nó diễn ra keys()values()không tranh luận.


Câu trả lời:


324

Mã hiện tại của bạn chỉ cần một chút điều chỉnh. i chìa khóa, vì vậy bạn chỉ cần sử dụng nó:

for i in d:
    print i, d[i]

Bạn cũng có thể nhận được một trình vòng lặp chứa cả khóa và giá trị. Trong Python 2, d.items()trả về một danh sách các bộ (khóa, giá trị), trong khi d.iteritems()trả về một trình vòng lặp cung cấp cùng:

for k, v in d.iteritems():
    print k, v

Trong Python 3, d.items()trả về iterator; để có được một danh sách, bạn cần truyền iterator cho list()chính mình.

for k, v in d.items():
    print(k, v)

60

Một chút giới thiệu về từ điển

d={'a':'apple','b':'ball'}
d.keys()  # displays all keys in list
['a','b']
d.values() # displays your values in list
['apple','ball']
d.items() # displays your pair tuple of key and value
[('a','apple'),('b','ball')

Khóa in, giá trị phương thức một

for x in d.keys():
    print x +" => " + d[x]

Một phương pháp khác

for key,value in d.items():
    print key + " => " + value

Bạn có thể lấy chìa khóa bằng cách sử dụng iter

>>> list(iter(d))
['a', 'b']

Bạn có thể nhận giá trị của khóa từ điển bằng cách sử dụng get(key, [value]):

d.get('a')
'apple'

Nếu khóa không có trong từ điển, khi giá trị mặc định được cung cấp, sẽ trả về giá trị.

d.get('c', 'Cat')
'Cat'


9

Từ điển:

d={'key1':'value1','key2':'value2','key3':'value3'}

Một giải pháp một dòng khác:

print(*d.items(), sep='\n')

Đầu ra:

('key1', 'value1')
('key2', 'value2')
('key3', 'value3')

(nhưng, vì không ai từng đề xuất một cái gì đó như thế này trước đây, tôi nghi ngờ đó không phải là thực hành tốt)


1
Tôi nghĩ rằng đây chắc chắn là một câu trả lời được chấp nhận hơn! ... tôi cảm thấy câu trả lời này cho thấy loại sức mạnh trong python mà hầu hết bị bỏ qua ... bạn cũng có thể làm theo để thoát khỏi '()' ... print(*[f"{': '.join(map(str,v))}" for i,v in enumerate(list(d.items()))], sep='\n').... hoặc bạn có thể làm như sau thuận tiện in chỉ số # cũng nhưprint(*[f"[{i}] {': '.join(map(str,v))}" for i,v in enumerate(list(d.items()))], sep='\n')
nhà kính


4

Bạn có thể truy cập các khóa và / hoặc giá trị của mình bằng cách gọi các mục () trên từ điển của bạn.

for key, value in d.iteritems():
    print(key, value)

1
bạn đã nói items()trong dòng đầu tiên của văn bản của bạn và trong mã bạn đặt iteritems(). Trong python3x, cách chính xác là dict.items()như bạn đã nói trước.
Joel Carneiro

3

Nếu bạn muốn sắp xếp đầu ra theo khóa dict, bạn có thể sử dụng gói bộ sưu tập .

import collections
for k, v in collections.OrderedDict(sorted(d.items())).items():
    print(k, v)

Nó hoạt động trên python 3


2
>>> d={'a':1,'b':2,'c':3}
>>> for kv in d.items():
...     print kv[0],'\t',kv[1]
... 
a   1
c   3
b   2

1

Ngoài các cách đã được đề cập .. có thể sử dụng 'viewitems', 'viewkey', 'viewvalues'

>>> d = {320: 1, 321: 0, 322: 3}
>>> list(d.viewitems())
[(320, 1), (321, 0), (322, 3)]
>>> list(d.viewkeys())
[320, 321, 322]
>>> list(d.viewvalues())
[1, 0, 3]

Hoặc là

>>> list(d.iteritems())
[(320, 1), (321, 0), (322, 3)]
>>> list(d.iterkeys())
[320, 321, 322]
>>> list(d.itervalues())
[1, 0, 3]

hoặc sử dụng itemgetter

>>> from operator import itemgetter
>>> map(itemgetter(0), dd.items())     ####  for keys
['323', '332']
>>> map(itemgetter(1), dd.items())     ####  for values
['3323', 232]

0

Một từ điển đơn giản:

x = {'X':"yes", 'Y':"no", 'Z':"ok"}

Để in một cặp (khóa, giá trị) cụ thể trong Python 3 (cặp tại chỉ mục 1 trong ví dụ này):

for e in range(len(x)):
    print(([x for x in x.keys()][e], [x for x in x.values()][e]))

Đầu ra:

('X', 'yes')
('Y', 'no')
('Z', 'ok')

Đây là một giải pháp lót để in tất cả các cặp trong một tuple:

print(tuple(([x for x in x.keys()][i], [x for x in x.values()][i]) for i in range(len(x))))

Đầu ra:

(('X', 'yes'), ('Y', 'no'), ('Z', 'ok'))
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.