ฉันจะรับคีย์พจนานุกรมเป็นตัวแปรโดยตรงใน Python (ไม่ใช่โดยการค้นหาจากค่า)


189

ขออภัยสำหรับคำถามพื้นฐานนี้ แต่การค้นหาของฉันในเรื่องนี้ไม่ได้เกิดขึ้นนอกเหนือจากวิธีการรับคีย์พจนานุกรมตามค่าของมันซึ่งฉันไม่ต้องการใช้เพราะฉันต้องการข้อความ / ชื่อของคีย์และฉันกังวลว่าการค้นหา โดยค่าอาจสิ้นสุดการส่งคืน 2 คีย์ขึ้นไปหากพจนานุกรมมีรายการจำนวนมาก ... สิ่งที่ฉันพยายามทำคือ:

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

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

เหตุผลสำหรับสิ่งนี้คือฉันกำลังพิมพ์สิ่งเหล่านี้ลงในเอกสารและฉันต้องการใช้ชื่อคีย์และค่าในการทำสิ่งนี้

ฉันได้เห็นวิธีการด้านล่าง แต่ดูเหมือนว่าจะคืนค่าคีย์

get(key[, default])

คุณแค่ต้องการตรวจสอบว่า 'ชื่อคีย์' มีอยู่ในพจนานุกรมหรือไม่ เพราะคุณไม่ได้มันแล้ว
relet

1
ไม่อย่างที่ฉันบอกว่าจำเป็นต้องพิมพ์ออกมามันจะวนซ้ำผ่านปุ่มจำนวนมาก
Rick

currentเป็นกุญแจปัจจุบันเพียงทำprint current
Moberg

4
คุณจะได้รับคีย์ที่ 1 ในพจนานุกรมได้อย่างไร (ไม่มีการวนซ้ำ)
VISQL

คำตอบ:


238

คุณควรทำซ้ำปุ่มด้วย:

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

10
คุณสามารถเขียนfor key in mydictionary:
blokeley

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

94

หากคุณต้องการพิมพ์คีย์และค่าใช้สิ่งต่อไปนี้:

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

26
สำหรับ Python 3: items () แทนที่จะเป็น iteritems ()
toshiro92

82

เหตุผลสำหรับสิ่งนี้คือฉันกำลังพิมพ์สิ่งเหล่านี้ลงในเอกสารและฉันต้องการใช้ชื่อคีย์และค่าในการทำสิ่งนี้

ตามข้อกำหนดข้างต้นนี่คือสิ่งที่ฉันอยากจะแนะนำ:

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

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

ฉันชอบคำตอบอื่น ๆ เช่น for loop on my_dict.item()หรือ list comprehension like keys = list(my_dict.keys)แต่ในกรณีที่มีคนต้องการทำเช่นนี้ใน Python 3: (บรรทัด 2) keys = sorted(my_dict.keys())+ เพิ่ม () เพื่อพิมพ์
Honiix

50

หากพจนานุกรมมีหนึ่งคู่เช่นนี้:

d = {'age':24}

จากนั้นคุณสามารถรับเป็น

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

สำหรับ Python 3.5 ให้ทำสิ่งนี้:

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

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

ค่อนข้างแฮ็ค แต่ d .__ iter __ () .__ ต่อไป __ () ทำกลอุบาย คุณได้รับ 'อายุ' คุณจะได้ผลลัพธ์เดียวกันกับ d.items () .__ iter __ () .__ next __ () [0]
โยชิ

2
ใน Python3 มันใช้ได้กับหนึ่งคู่ dicts:key = list(d.keys())[0]
Juha Untinen

หากคุณมีข้อเขียนขนาดใหญ่การใช้next()จะดีกว่าตาม: stackoverflow.com/a/27638751/1488445
Juha Untinen

14

keys=[i for i in mydictionary.keys()] หรือ keys = list(mydictionary.keys())


โปรดตรวจสอบให้แน่ใจว่าใช้รหัสแท็กและอธิบายคำตอบของคุณด้วย
Chrismas007

9

ง่ายเหมือนที่:

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

คุณจะแก้ไขพจนานุกรมของคุณและควรทำสำเนาก่อน


8

คุณสามารถใช้*อันปลดล็อคคีย์พจนานุกรมได้ ตัวอย่าง:

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

python34: SyntaxError: สามารถใช้การแสดงออกที่ติดดาวเป็นเป้าหมายการมอบหมายเท่านั้น
Tcll

ใช่ฉันใช้ python34 เพราะฉันไม่สามารถเรียกใช้สิ่งใหม่กว่าในสภาพแวดล้อมการทดสอบ windows ของฉันได้
Tcll

5

ทำซ้ำมากกว่าพจนานุกรม (i) จะส่งคืนคีย์จากนั้นใช้ (i) เพื่อรับค่า

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

3

สำหรับไพ ธ อน 3 หากคุณต้องการได้รับกุญแจเท่านั้นใช้สิ่งนี้ แทนที่การพิมพ์ (คีย์) ด้วยการพิมพ์ (ค่า) หากคุณต้องการค่า

for key,value in my_dict:
  print(key)

3

สิ่งที่ฉันทำในบางครั้งคือฉันสร้างพจนานุกรมใหม่เพื่อให้สามารถใช้ตามที่ฉันรู้สึกว่าต้องใช้เป็นสตริง จากนั้นฉันก็วนซ้ำพจนานุกรมที่ตรงกับคีย์เพื่อสร้างเช่นตารางที่มีคอลัมน์แรกเป็นคำอธิบาย

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])

คุณสามารถทำพจนานุกรมจำนวนมากเพื่อจับคู่ข้อมูลได้อย่างง่ายดาย (ฉันชอบความจริงที่ว่าด้วยพจนานุกรมคุณสามารถอ้างถึงสิ่งที่รู้จักกันดีว่าเป็นชื่อคีย์)

ใช่ฉันใช้พจนานุกรมเพื่อเก็บผลลัพธ์ของฟังก์ชั่นดังนั้นฉันไม่จำเป็นต้องเรียกใช้ฟังก์ชั่นเหล่านี้ทุกครั้งที่ฉันเรียกพวกเขาเพียงครั้งเดียวแล้วเข้าถึงผลลัพธ์ได้ทุกเมื่อ

แก้ไข: ในตัวอย่างของฉันชื่อคีย์ไม่สำคัญ (โดยส่วนตัวแล้วฉันชอบใช้ชื่อคีย์เดียวกันเพราะง่ายกว่าที่จะเลือกค่าเดียวจากพจนานุกรมที่ตรงกันของฉัน) เพียงแค่ให้แน่ใจว่าจำนวนของคีย์ในพจนานุกรมแต่ละอัน เหมือน


0

คุณสามารถทำได้โดยการเลือกคีย์ dict และค่าเพื่อแสดง นอกจากนี้ยังสามารถทำได้สำหรับรายการ

ตัวอย่าง:

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

เปลี่ยนตำแหน่งของคีย์และค่าของคุณได้อย่างง่ายดายจากนั้นใช้ค่าเพื่อรับคีย์ในคีย์พจนานุกรมสามารถมีค่าเหมือนกัน แต่คีย์ (คีย์) ควรแตกต่างกัน เช่นถ้าคุณมีรายการและค่าแรกของมันคือกุญแจสำคัญสำหรับปัญหาของคุณและค่าอื่น ๆ คือข้อมูลจำเพาะของค่าแรก:

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

คุณสามารถบันทึกและใช้ข้อมูลได้อย่างง่ายดายในพจนานุกรมโดยวงนี้:

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'}

จากนั้นคุณสามารถค้นหาคีย์ (ชื่อ) ฐานจากค่าอินพุตใด ๆ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.