Làm cách nào tôi có thể lấy khóa từ điển dưới dạng biến trực tiếp trong Python (không phải bằng cách tìm kiếm từ giá trị)?


189

Xin lỗi vì câu hỏi cơ bản này nhưng các tìm kiếm của tôi về vấn đề này không tìm thấy gì ngoài cách lấy khóa từ điển dựa trên giá trị của nó mà tôi không muốn sử dụng vì tôi chỉ muốn văn bản / tên của khóa và lo lắng rằng việc tìm kiếm theo giá trị có thể sẽ trả về 2 hoặc nhiều khóa nếu từ điển có nhiều mục ... điều tôi đang cố gắng làm là:

mydictionary={'keyname':'somevalue'}
for current in mydictionary:

   result = mydictionary.(some_function_to_get_key_name)[current]
   print result
   "keyname"

Lý do cho điều này là vì tôi đang in chúng ra một tài liệu và tôi muốn sử dụng tên khóa và giá trị để thực hiện điều này

Tôi đã thấy phương thức bên dưới nhưng điều này dường như chỉ trả về giá trị của khóa

get(key[, default])

Bạn có muốn kiểm tra xem 'tên khóa' có tồn tại trong từ điển không? Bởi vì bạn làm có nó rồi.
tái lập

1
không như tôi đã nói, cần phải in nó ra, nó sẽ lặp đi lặp lại qua một số lượng lớn các phím
Rick

currentlà chìa khóa hiện tại, chỉ cần làmprint current
Moberg 24/2/2015

4
Làm thế nào bạn sẽ chỉ nhận được khóa đầu tiên trong từ điển? (không lặp lại)
VISQL

Câu trả lời:


238

Bạn nên lặp lại các phím với:

for key in mydictionary:
   print "key: %s , value: %s" % (key, mydictionary[key])

10
Bạn chỉ có thể viếtfor key in mydictionary:
blode 12/07/2015

7
trong python 3.6:print (f"key: {key}, value: {mydictionary[key]}")
JinSnow

94

Nếu bạn muốn in khóa và giá trị, hãy sử dụng như sau:

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

25
Đối với Python 3: items () thay vì iteritems ()
toshiro92

82

Lý do cho điều này là vì tôi đang in chúng ra một tài liệu và tôi muốn sử dụng tên khóa và giá trị để thực hiện điều này

Dựa trên yêu cầu trên đây là những gì tôi muốn đề xuất:

keys = mydictionary.keys()
keys.sort()

for each in keys:
    print "%s: %s" % (each, mydictionary.get(each))

Tôi thích các câu trả lời khác như vòng lặp for my_dict.item()hoặc liệt kê mức độ hiểu keys = list(my_dict.keys)nhưng chỉ trong trường hợp ai đó muốn làm điều này trong Python 3: (dòng 2) keys = sorted(my_dict.keys())+ add () để in.
Honiix

49

Nếu từ điển chứa một cặp như thế này:

d = {'age':24}

sau đó bạn có thể nhận được như

field, value = d.items()[0]

Đối với Python 3.5, hãy làm điều này:

key = list(d.keys())[0]

4
Python3.5:TypeError: 'dict_items' object does not support indexing
Sinux

Khá hackish nhưng d .__ iter __ () .__ next __ () thực hiện một mẹo. bạn nhận được "tuổi". Bạn nhận được kết quả tương tự với d.items () .__ iter __ () .__ next __ () [0].
yoshi

2
Trong Python3, điều này hoạt động cho một cặp ký tự:key = list(d.keys())[0]
Juha Untinen

Nếu bạn có một lệnh rất lớn, sử dụng next()sẽ tốt hơn theo: stackoverflow.com/a/27638751/1488445
Juha Untinen

14

keys=[i for i in mydictionary.keys()] hoặc là keys = list(mydictionary.keys())


Vui lòng đảm bảo sử dụng thẻ mã và giải thích câu trả lời của bạn.
Chrismas007

9

Đơn giản vậy thôi:

mydictionary={'keyname':'somevalue'}
result = mydictionary.popitem()[0]

Bạn sẽ sửa đổi từ điển của bạn và nên tạo một bản sao của nó trước


8

Bạn chỉ có thể sử dụng *để giải nén các khóa từ điển. Thí dụ:

d = {'x': 1, 'y': 2}
t = (*d,)
print(t) # ('x', 'y')

python34: SyntaxError: chỉ có thể sử dụng biểu thức được gắn dấu sao làm mục tiêu gán
Tcll

dang, tôi sử dụng python34 vì tôi không thể chạy bất cứ thứ gì mới hơn trong môi trường thử nghiệm windows của mình.
Tcll

5

Lặp lại từ điển (i) sẽ trả về khóa, sau đó sử dụng nó (i) để nhận giá trị

for i in D:
    print "key: %s, value: %s" % (i, D[i])

3

Đối với python 3 Nếu bạn chỉ muốn lấy các phím, hãy sử dụng cái này. Thay thế in (khóa) bằng in (giá trị) nếu bạn muốn các giá trị.

for key,value in my_dict:
  print(key)

3

Những gì tôi đôi khi làm là tôi tạo một từ điển khác chỉ để có thể bất cứ điều gì tôi cảm thấy tôi cần truy cập dưới dạng chuỗi. Sau đó, tôi lặp lại qua nhiều từ điển khớp với các khóa để xây dựng, ví dụ một bảng có cột đầu tiên là mô tả.

dict_names = {'key1': 'Text 1', 'key2': 'Text 2'}
dict_values = {'key1': 0, 'key2': 1} 

for key, value in dict_names.items():
    print('{0} {1}'.format(dict_names[key], dict_values[key])

Bạn có thể dễ dàng thực hiện cho một số lượng lớn từ điển để khớp dữ liệu (tôi thích thực tế là với từ điển, bạn luôn có thể đề cập đến một cái gì đó được gọi là tên khóa)

có Tôi sử dụng từ điển để lưu trữ kết quả của các chức năng vì vậy tôi không cần phải chạy các chức năng này mỗi khi tôi gọi chúng chỉ một lần và sau đó truy cập kết quả bất cứ lúc nào.

EDIT: trong ví dụ của tôi, tên khóa không thực sự quan trọng (cá nhân tôi thích sử dụng cùng tên khóa vì dễ dàng hơn để chọn một giá trị từ bất kỳ từ điển phù hợp nào của tôi), chỉ cần đảm bảo số lượng khóa trong mỗi từ điển là giống nhau


0

Bạn có thể làm điều này bằng cách chuyển các khóa và giá trị dict vào danh sách. Nó cũng có thể được thực hiện cho các mục.

Thí dụ:

f = {'one': 'police', 'two': 'oranges', 'three': 'car'}
list(f.keys())[0] = 'one'
list(f.keys())[1] = 'two'

list(f.values())[0] = 'police'
list(f.values())[1] = 'oranges'

-2

dễ dàng thay đổi vị trí của các khóa và giá trị của bạn, sau đó sử dụng các giá trị để lấy khóa, trong các khóa từ điển có thể có cùng một giá trị nhưng chúng (các khóa) phải khác nhau. ví dụ: nếu bạn có một danh sách và giá trị đầu tiên của nó là chìa khóa cho vấn đề của bạn và các giá trị khác là thông số kỹ thuật của giá trị đầu tiên:

list1=["Name",'ID=13736','Phone:1313','Dep:pyhton']

bạn có thể lưu và sử dụng dữ liệu dễ dàng trong Từ điển theo vòng lặp này:

data_dict={}
for i in range(1, len(list1)):
     data_dict[list1[i]]=list1[0]
print(data_dict)
{'ID=13736': 'Name', 'Phone:1313': 'Name', 'Dep:pyhton': 'Name'}

sau đó bạn có thể tìm thấy khóa (tên) dựa trên bất kỳ giá trị đầu vào nào.

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.