অভিধানের কী কীভাবে প্রিন্ট করবেন?


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()কী নাম মুদ্রণের কোনও পদ্ধতি আছে?


সম্পাদনা: ঠিক আছে, আপনার প্রতিক্রিয়ার জন্য অনেক লোককে ধন্যবাদ! :) আমি বুঝতে পারি যে আমার প্রশ্নটি সঠিকভাবে সূচিত এবং তুচ্ছ নয়। আমি মাত্র বিভ্রান্ত হয়ে পড়েছি কারণ আমি কী_নামটি বুঝতে পেরেছি এবং mydic['key_name']এটি দুটি ভিন্ন জিনিস এবং আমি ভেবেছিলাম key_nameঅভিধানের প্রসঙ্গটি মুদ্রণ করা ভুল হবে । তবে প্রকৃতপক্ষে আমি কীটি উল্লেখ করতে 'কী_নাম' ব্যবহার করতে পারি! :)


19
আপনি যদি সুনির্দিষ্ট কীটি চান তা কী জানেন, উম্ম, আপনি কীটি কী তা ইতিমধ্যে তা জানেন।
উবল

উত্তর:


382

সংজ্ঞা অনুসারে একটি অভিধানে কীগুলির একটি স্বেচ্ছাসেবী সংখ্যা রয়েছে। কোনও "কী" নেই। আপনার কাছে keys()পদ্ধতিটি রয়েছে, যা আপনাকে listসমস্ত কীগুলির একটি অজগর দেয় এবং আপনার কাছে iteritems()পদ্ধতিটি রয়েছে যা কী-মূল্যের জোড়া দেয়, তাই

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

পাইথন 3 সংস্করণ:

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

সুতরাং কীগুলিতে আপনার একটি হ্যান্ডেল রয়েছে তবে এগুলি কেবলমাত্র একটি মানের সাথে মিলিত হলে বোধগম্য। আমি আশা করি আপনার প্রশ্নটি আমি বুঝতে পেরেছি।


1
যদিও এটি পাইথন ২.7 এ আমার পক্ষে সুন্দরভাবে কাজ করেছে, পাই 3 কে বিকল্প কী? আমি জানি .iteritems()এখন আর সমর্থিত নয় ...
পাইপারচেস্টার

5
@ পলিশেল অজগর 3 এর বিকল্পটি, যদি আপনি পাই 3 কে বলতে চাইছেন (আমি এখন অজগর থেকে কিছুক্ষণ দূরে এসেছি) এটি .items()। আমি একটি উদাহরণ যুক্ত করেছি।
janchopanza

1
@ বিভাস তারা উভয়ই কাজ করে তবে শব্দার্থকতা আলাদা। items()পাইথন ২.x-এ একটি তালিকা প্রদান করে
juanchopanza


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.iteitems () এর নাম পরিবর্তন করে dic.items () করা হয়েছিল


25

'কী_নাম' কীটির নাম কী_নাম, অতএব 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())

নোট (উপরে হিসাবে) যে iteritems পাইথন 3 এ কেবল 'আইটেম' হয়ে উঠেছে
মাইক 2

সতর্কতা: আপনি যদি পরিবর্তিত 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 এর এফ-স্ট্রিংয়ের জন্য আপডেট হয়েছে ...



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
key_name = '...'
print "the key name is %s and its value is %s"%(key_name, mydic[key_name])

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]

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.