शब्दकोश की कुंजी कैसे प्रिंट करें?


213

मैं एक विशिष्ट पायथन शब्दकोश कुंजी प्रिंट करना चाहता हूं:

mydic = {}
mydic['key_name'] = 'value_name'

अब मैं जाँच कर सकता हूँ mydic.has_key('key_name')कि क्या हो सकता है , लेकिन मैं जो करना चाहूँगा, वह कुंजी का नाम है 'key_name'। बेशक मैं उपयोग कर सकता था mydic.items(), लेकिन मैं सूचीबद्ध सभी कुंजी नहीं चाहता , केवल एक विशिष्ट कुंजी। उदाहरण के लिए मैं कुछ इस तरह की उम्मीद करूँगा (छद्म कोड में):

print "the key name is", mydic['key_name'].name_the_key(), "and its value is", mydic['key_name']

क्या किसी name_the_key()नाम को छापने की कोई विधि है?


संपादित करें: ठीक है, आपकी प्रतिक्रिया के लिए बहुत से लोग धन्यवाद! :) मुझे एहसास है कि मेरा सवाल अच्छी तरह से तैयार और तुच्छ नहीं है। मैं बस भ्रमित हो गया क्योंकि मुझे key_name का एहसास हुआ और mydic['key_name']दो अलग-अलग चीजें हैं और मैंने सोचा key_nameकि शब्दकोश संदर्भ के बाहर प्रिंट करना गलत होगा । लेकिन वास्तव में मैं केवल कुंजी को संदर्भित करने के लिए 'key_name' का उपयोग कर सकता हूं! :)


19
यदि आप जानते हैं कि आपको क्या विशिष्ट कुंजी चाहिए, उम, आप पहले से ही जानते हैं कि कुंजी क्या है।
Wooble

जवाबों:


382

एक शब्दकोश में, परिभाषा के अनुसार, चाबियों की एक मनमानी संख्या है। कोई "कुंजी" नहीं है। आपके पास keys()विधि है, जो आपको listसभी कुंजी का एक अजगर देता है , और आपके पास iteritems()विधि है, जो कुंजी-मूल्य जोड़े को लौटाता है,

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

पायथन 3 संस्करण:

for key, value in mydic.items() :
    print (key, value)

इसलिए आपके पास कुंजियों पर एक हैंडल है, लेकिन वे केवल वास्तव में मतलब रखते हैं यदि मूल्य के लिए युग्मित हो। मुझे आशा है कि मैं आपके प्रश्न को समझ गया हूँ।


1
हालांकि यह पायथन 2.7 में मेरे लिए खूबसूरती से काम करता है, Py3k में विकल्प क्या है? मुझे पता .iteritems()है कि अब समर्थित नहीं है ...
पाइपरचेस्टर

5
@ पॉलीथॉन 3 में विकल्प को छोड़ दें, यदि आप Py3k से मतलब रखते हैं (मैं थोड़ी देर के लिए अजगर से दूर रहा हूं) .items()। मैंने एक उदाहरण जोड़ा।
जुआनचोपान्ज़ा २ '

1
@ बिबास वे दोनों काम करते हैं, लेकिन शब्दार्थ अलग हैं। items()अजगर 2.x में एक सूची देता है।
जुआनकोपंजा 13


34

हम्म, मुझे लगता है कि आप जो करना चाहते हैं वह शब्दकोश में सभी कुंजी और उनके संबंधित मूल्यों को प्रिंट कर सकता है ?

यदि आप निम्न चाहते हैं:

for key in mydic:
  print "the key name is" + key + "and its value is" + mydic[key]

सुनिश्चित करें कि आप के बजाय + का उपयोग करें, के रूप में अच्छी तरह से। अल्पविराम उन वस्तुओं में से प्रत्येक को एक अलग लाइन पर रखेगा जो मुझे लगता है, जहां प्लस उन्हें एक ही लाइन पर रखेगा।


2
अल्पविराम उन्हें एक ही पंक्ति पर छोड़ देगा, लेकिन बीच में रिक्त स्थान डालें "is"और keyआदि। यदि आप उपयोग करते हैं +तो आपको स्ट्रिंग्स में अतिरिक्त पैडिंग लगाने की आवश्यकता है। कुंजी और मान भी आवश्यक नहीं है कि स्ट्रिंग, जिस स्थिति में अल्पविराम str (कुंजी) और str (मान) का उपयोग +करेगा, जबकि एक त्रुटि का कारण होगा
जॉन ला रोय

1
यह एक उत्तर है जिसे मैं जानता हूं कि यह सही नहीं है, क्योंकि ओपी ने कहा, "मुझे सूचीबद्ध सभी चाबियाँ नहीं चाहिए।"
नेड बाचेल्डर

किसी कारण के लिए मैंने अन्यथा अल्पविराम के लिए सोचा; आप उस एक पर सही हैं। मैंने प्रश्न को फिर से पढ़ा है, ऐसा लगता है कि हम दोनों को बोल्ड में डाल दिया है - मेरा बुरा।
डोमिनिक सैंटोस

32
dic = {"key 1":"value 1","key b":"value b"}

#print the keys:
for key in dic:
    print key

#print the values:
for value in dic.itervalues():
    print value

#print key and values
for key, value in dic.iteritems():
    print key, value

नोट: पायथन 3 में, dic.iteritems () को dic.items () नाम दिया गया था


25

कुंजी 'key_name' का नाम key_name है, इसलिए print 'key_name'या आपके पास जो भी चर है वह इसका प्रतिनिधित्व कर रहा है।


10

पायथन 3 में:

# A simple dictionary
x = {'X':"yes", 'Y':"no", 'Z':"ok"}

# To print a specific key (for example key at index 1)
print([key for key in x.keys()][1])

# To print a specific value (for example value at index 1)
print([value for value in x.values()][1])

# To print a pair of a key with its value (for example pair at index 2)
print(([key for key in x.keys()][2], [value for value in x.values()][2]))

# To print a key and a different value (for example key at index 0 and value at index 1)
print(([key for key in x.keys()][0], [value for value in x.values()][1]))

# To print all keys and values concatenated together
print(''.join(str(key) + '' + str(value) for key, value in x.items()))

# To print all keys and values separated by commas
print(', '.join(str(key) + ', ' + str(value) for key, value in x.items()))

# To print all pairs of (key, value) one at a time
for e in range(len(x)):
    print(([key for key in x.keys()][e], [value for value in x.values()][e]))

# To print all pairs (key, value) in a tuple
print(tuple(([key for key in x.keys()][i], [value for value in x.values()][i]) for i in range(len(x))))

8

चूँकि हम सभी यह अनुमान लगाने की कोशिश कर रहे हैं कि "एक प्रमुख नाम प्रिंट" का क्या मतलब हो सकता है, मैं इस पर एक नज़र डालूंगा। शायद आप एक ऐसा फंक्शन चाहते हैं, जो डिक्शनरी से वैल्यू लेता हो और जो संबंधित कुंजी पाता हो? एक रिवर्स लुकअप?

def key_for_value(d, value):
    """Return a key in `d` having a value of `value`."""
    for k, v in d.iteritems():
        if v == value:
            return k

ध्यान दें कि कई कुंजियों का एक ही मूल्य हो सकता है, इसलिए यह फ़ंक्शन कुछ कुंजी मान को लौटाएगा , शायद वह नहीं जो आप का इरादा था।

यदि आपको बार-बार ऐसा करने की जरूरत है, तो इसका उल्टा शब्दकोष बनाने में मदद मिलेगी:

d_rev = dict(v,k for k,v in d.iteritems())

ध्यान दें (ऊपर के रूप में) कि पुनरावृत्तियाँ पायथन 3 में 'आइटम' बन गईं।
माइक

सावधानी: यदि आप बदल iteritemsजाते हैं items, तो जैसा कि मूल रूप से दिखाया गया है कि यह उत्तर केवल पहली कुंजी लौटाएगा - यदि कई मैच हैं। इसे हल करने के लिए, for loop( values_list = []) से पहले एक रिक्त सूची बनाएं , फिर इस सूची में चाबियाँ जोड़ें ( values_list.append(k)), ifलूप में। अंतिम, लूप के return values_listबाहर रिटर्न स्टेटमेंट ( ) ले जाएँ for
विक्टोरिया स्टुअर्ट


4
# highlighting how to use a named variable within a string:
mapping = {'a': 1, 'b': 2}

# simple method:
print(f'a: {mapping["a"]}')
print(f'b: {mapping["b"]}')

# programmatic method:
for key, value in mapping.items():
    print(f'{key}: {value}')

# yields:
# a 1
# b 2

# using list comprehension
print('\n'.join(f'{key}: {value}' for key, value in dict.items()))


# yields:
# a: 1
# b: 2

संपादित करें: अजगर 3 के तार के लिए अपडेट किया गया ...


3

करना सुनिश्चित करें

dictionary.keys()
# rather than
dictionary.keys

2

'key_name'इसके बजाय इसका उपयोग करने में क्या गलत है , भले ही यह एक चर है?




1

संभवतः केवल प्रमुख नाम को पुनः प्राप्त करने का सबसे तेज़ तरीका है:

mydic = {}
mydic['key_name'] = 'value_name'

print mydic.items()[0][0]

परिणाम:

key_name

में कनवर्ट करता है dictionaryएक में listतो यह पहला तत्व है जो पूरे सूचीबद्ध करता है dictतो यह है कि तत्व है जिनमें से पहले मान को सूचीबद्ध:key_name


यद्यपि मान को पुनः प्राप्त क्यों किया जाता है?
मार्टिज़न पीटरर्स

1

मैंने इस प्रश्न को देखा, क्योंकि मैं जानना चाहता था कि "कुंजी" के नाम को कैसे पुनः प्राप्त किया जाए यदि मेरे शब्दकोश में केवल एक प्रविष्टि थी। मेरे मामले में, कुंजी मेरे लिए अज्ञात थी और किसी भी संख्या में हो सकती है। यहां वह है जो मैंने जुटाया:

dict1 = {'random_word': [1,2,3]}
key_name = str([key for key in dict1]).strip("'[]'")        
print(key_name)  # equal to 'random_word', type: string.

0

इसे इस्तेमाल करे:

def name_the_key(dict, key):
    return key, dict[key]

mydict = {'key1':1, 'key2':2, 'key3':3}

key_name, value = name_the_key(mydict, 'key2')
print 'KEY NAME: %s' % key_name
print 'KEY VALUE: %s' % value


0

यदि आप एकल मूल्य की कुंजी प्राप्त करना चाहते हैं, तो निम्नलिखित मदद करेगा:

def get_key(b): # the value is passed to the function
    for k, v in mydic.items():
        if v.lower() == b.lower():
            return k

पायथोनिक तरीके से:

c = next((x for x, y in mydic.items() if y.lower() == b.lower()), \
     "Enter a valid 'Value'")
print(c)

0

मैं इस उत्तर को अन्य उत्तरों में से एक के रूप में यहाँ जोड़ रहा हूँ ( https://stackoverflow.com/a/5905752/1904943 ) दिनांकित है (पायथन 2; iteritems), और प्रस्तुत कोड - यदि सुझाव के अनुसार पायथन 3 के लिए अद्यतन किया गया है ; उस उत्तर के लिए एक टिप्पणी में समाधान - चुपचाप सभी प्रासंगिक डेटा को वापस करने में विफल रहता है।


पृष्ठभूमि

मेरे पास कुछ चयापचय डेटा हैं, जो एक ग्राफ (नोड्स, किनारों, ...) में दर्शाए गए हैं। उन डेटा के एक शब्दकोश प्रतिनिधित्व में, चाबियाँ फॉर्म के हैं (604, 1037, 0)(स्रोत और लक्ष्य नोड्स का प्रतिनिधित्व करते हैं, और किनारे का प्रकार), फॉर्म के मूल्यों5.3.1.9 (ईसी एंजाइम कोड का प्रतिनिधित्व) के साथ।

दिए गए मूल्यों के लिए कुंजी खोजें

निम्न कोड सही ढंग से मेरी कुंजी पाता है, दिए गए मान:

def k4v_edited(my_dict, value):
    values_list = []
    for k, v in my_dict.items():
        if v == value:
            values_list.append(k)
    return values_list

print(k4v_edited(edge_attributes, '5.3.1.9'))
## [(604, 1037, 0), (604, 3936, 0), (1037, 3936, 0)]

जबकि यह कोड केवल पहली (संभवत: कई मिलान वाली) कुंजी देता है:

def k4v(my_dict, value):
    for k, v in my_dict.items():
        if v == value:
            return k

print(k4v(edge_attributes, '5.3.1.9'))
## (604, 1037, 0)

बाद के कोड, भोलेपन से जगह अद्यतन iteritemsके साथ items, वापस जाने के लिए विफल रहता है (604, 3936, 0), (1037, 3936, 0


0

डेटा तक पहुंचने के लिए, आपको यह करने की आवश्यकता होगी:

foo = {
    "foo0": "bar0",
    "foo1": "bar1",
    "foo2": "bar2",
    "foo3": "bar3"
}
for bar in foo:
  print(bar)

या, मान को एक्सेस करने के लिए आप इसे कुंजी से कहते हैं: foo[bar]

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.