উত্তর:
পাইথন 2.7 এবং 3 এর পরে, আপনার কেবল ডিক বোঝার বাক্য গঠন ব্যবহার করা উচিত :
{key: value for (key, value) in iterable}
পাইথন ২.6 এবং তার আগে, dict
বিল্ট-ইনগুলি কী / মান জোড়ার পুনরাবৃত্তি পেতে পারে, তাই আপনি এটিকে একটি তালিকা বোঝার বা জেনারেটর এক্সপ্রেশনটি পাস করতে পারেন। উদাহরণ স্বরূপ:
dict((key, func(key)) for key in keys)
তবে আপনার যদি ইতিমধ্যে কী এবং / অথবা ভ্যালসগুলির পুনরাবৃত্তিযোগ্য (গুলি) থাকে তবে আপনার কোনও বোধগম্যতা ব্যবহার করার দরকার নেই - এটি কেবল dict
বিল্ট- ইনকে সরাসরি কল করুন :
# consumed from any iterable yielding pairs of keys/vals
dict(pairs)
# "zipped" from two separate iterables of keys/vals
dict(zip(list_of_keys, list_of_values))
পাইথন 3 এবং পাইথন 2.7+ তে অভিধানের বোধগম্যতা নীচের মত দেখাচ্ছে:
d = {k:v for k, v in iterable}
পাইথন ২.6 বা তারও আগের জন্য, কৌতুকের উত্তর দেখুন ।
প্রকৃতপক্ষে, আপনার পুনরাবৃত্তির উপরে পুনরাবৃত্তি করার দরকার নেই যদি এটি ইতিমধ্যে কোনও ধরণের ম্যাপিং বোঝে তবে ডিক নির্মাতা এটি আপনার জন্য করুণাময়ভাবে করছেন:
>>> ts = [(1, 2), (3, 4), (5, 6)]
>>> dict(ts)
{1: 2, 3: 4, 5: 6}
>>> gen = ((i, i+1) for i in range(1, 6, 2))
>>> gen
<generator object <genexpr> at 0xb7201c5c>
>>> dict(gen)
{1: 2, 3: 4, 5: 6}
পাইথন ২.7-এ, এটি এর মতো হয়:
>>> list1, list2 = ['a', 'b', 'c'], [1,2,3]
>>> dict( zip( list1, list2))
{'a': 1, 'c': 3, 'b': 2}
তাদের জিপ !
পাইথনে তালিকা বোঝার জন্য একটি অভিধান তৈরি করুন
আমি পাইথন তালিকা বোঝার বাক্যটি পছন্দ করি like
এটি অভিধান তৈরি করতেও ব্যবহার করা যেতে পারে? উদাহরণস্বরূপ, কী এবং মানগুলির জোড়ায় পুনরাবৃত্তি করে:
mydict = {(k,v) for (k,v) in blah blah blah}
আপনি "বাক্য বোঝা" বাক্যাংশটি সন্ধান করছেন - এটি আসলে:
mydict = {k: v for k, v in iterable}
ধরে blah blah blah
নেওয়া দ্বি-দ্বৈতগুলির পুনরাবৃত্তিযোগ্য - আপনি এত কাছের। আসুন এর মতো কিছু "বালা" তৈরি করুন:
blahs = [('blah0', 'blah'), ('blah1', 'blah'), ('blah2', 'blah'), ('blah3', 'blah')]
এখন এখানে সিনট্যাক্সটি ম্যাপিংয়ের অংশ। নীচের মত , কোলনটি dict
বোঝার পরিবর্তে set
(যা আপনার সিউডো কোডটি প্রায় অনুমান করে) এর পরিবর্তে এটিকে একটি বোধগম্য করে তোলে :
:
mydict = {k: v for k, v in blahs}
এবং আমরা দেখতে পাই যে এটি কাজ করেছে এবং পাইথন ৩.7-এর সন্নিবেশ ক্রমটি বজায় রাখা উচিত:
>>> mydict
{'blah0': 'blah', 'blah1': 'blah', 'blah2': 'blah', 'blah3': 'blah'}
পাইথন 2 এবং 3.6 পর্যন্ত, অর্ডারের গ্যারান্টি দেওয়া হয়নি:
>>> mydict
{'blah0': 'blah', 'blah1': 'blah', 'blah3': 'blah', 'blah2': 'blah'}
সমস্ত বোধগম্য ম্যাপিং উপাদান এবং ফিল্টারিং উপাদান যা আপনি স্বেচ্ছাসেবী অভিব্যক্তি সরবরাহ করতে পারেন তা বৈশিষ্ট্যযুক্ত।
সুতরাং আপনি শেষ পর্যন্ত একটি ফিল্টার অংশ যুক্ত করতে পারেন:
>>> mydict = {k: v for k, v in blahs if not int(k[-1]) % 2}
>>> mydict
{'blah0': 'blah', 'blah2': 'blah'}
কীগুলি এবং মানগুলি ম্যাপ করার আগে ডেটা ফিল্টার আউট করার জন্য শেষ অক্ষরটি 2 দিয়ে বিভাজ্য হয় কিনা তা আমরা এখানে পরীক্ষা করছি।
পাইথন সংস্করণ <2.7 (আরআইপি, 3 জুলাই 2010 - 31 ডিসেম্বর 2019) , নীচে করুন:
d = dict((i,True) for i in [1,2,3])
পাইথন সংস্করণ> = 2.7, নীচে করুন:
d = {i: True for i in [1,2,3]}
ডিক বোঝার সাহায্যে অভিধান তৈরির আরেকটি উদাহরণ এখানে দেওয়া হয়েছে:
আমি এখানে যা করতে চাইছি তা হল একটি বর্ণমালা অভিধান তৈরি করা যেখানে প্রতিটি জুটি; এটি ইংরেজি বর্ণ এবং ইংরেজি বর্ণমালায় এর সম্পর্কিত অবস্থান
>>> import string
>>> dict1 = {value: (int(key) + 1) for key, value in
enumerate(list(string.ascii_lowercase))}
>>> dict1
{'a': 1, 'c': 3, 'b': 2, 'e': 5, 'd': 4, 'g': 7, 'f': 6, 'i': 9, 'h': 8,
'k': 11, 'j': 10, 'm': 13, 'l': 12, 'o': 15, 'n': 14, 'q': 17, 'p': 16, 's':
19, 'r': 18, 'u': 21, 't': 20, 'w': 23, 'v': 22, 'y': 25, 'x': 24, 'z': 26}
>>>
তালিকায় বর্ণমালা এবং তাদের সূচকের তালিকা পেতে এবং অভিধানের মূল কী জোড় তৈরি করতে বর্ণমালা এবং সূচকগুলি অদলবদল করতে এখানে গণকের ব্যবহারের বিষয়টি লক্ষ্য করুন
আশা করি এটি আপনার কাছে অভিধানের কমপ সম্পর্কে একটি ভাল ধারণা দেয় এবং আপনার কোডকে কমপ্যাক্ট তৈরি করতে আপনাকে আরও বেশিবার এটি ব্যবহার করতে উত্সাহিত করে
d = {k: v+1 for v, k in enumerate(string.ascii_lowercase)}
এটা চেষ্টা কর,
def get_dic_from_two_lists(keys, values):
return { keys[i] : values[i] for i in range(len(keys)) }
ধরুন আমাদের দুটি তালিকা দেশ এবং মূলধন রয়েছে
country = ['India', 'Pakistan', 'China']
capital = ['New Delhi', 'Islamabad', 'Beijing']
তারপরে দুটি তালিকা থেকে অভিধান তৈরি করুন:
print get_dic_from_two_lists(country, capital)
আউটপুটটি এরকম,
{'Pakistan': 'Islamabad', 'China': 'Beijing', 'India': 'New Delhi'}
>>> {k: v**3 for (k, v) in zip(string.ascii_lowercase, range(26))}
পাইথন ডিক বোঝাপড়া সমর্থন করে, যা আপনাকে অনুরূপ সংক্ষিপ্ত বাক্য গঠন ব্যবহার করে রানটাইম সময় অভিধান তৈরি করতে প্রকাশ করতে দেয়।
একটি অভিধান বোধগম্য form কী: ফর্মটি গ্রহণ করে: পুনরাবৃত্তীয় in এর মান (কী, মান)} এই সিনট্যাক্সটি পাইথন 3 এ প্রবর্তিত হয়েছিল এবং পাইথন 2.7 পর্যন্ত ব্যাকপোর্ট করা হয়েছিল, তাই পাইথনের কোন সংস্করণ আপনি ইনস্টল করেছেন তা নির্বিশেষে আপনার এটি ব্যবহার করতে সক্ষম হওয়া উচিত।
একটি প্রচলিত উদাহরণ দুটি তালিকাগুলি নিয়ে একটি অভিধান তৈরি করছে যেখানে প্রথম তালিকার প্রতিটি পজিশনের আইটেমটি কী হয়ে যায় এবং দ্বিতীয় তালিকার সংশ্লিষ্ট অবস্থানে থাকা আইটেমটি মান হয়ে যায়।
এই উপলব্ধিটির অভ্যন্তরে ব্যবহৃত জিপ ফাংশন টিপলসের একটি পুনরাবৃত্তির ফিরিয়ে দেয়, যেখানে টিপলের প্রতিটি উপাদান প্রতিটি ইনপুট পুনরাবৃত্তির একই অবস্থান থেকে নেওয়া হয়। উপরের উদাহরণে, প্রত্যাবর্তিত পুনরাবৃত্তকারীটিতে টিপলস ("এ", 1), ("বি", ২) ইত্যাদি রয়েছে contains
আউটপুট:
i 'আমি': 512, 'ই': 64, 'ও': 2744, 'এইচ': 343, 'এল': 1331, 'এস': 5832, 'বি': 1, 'ডব্লু': 10648, ' c ': 8,' x ': 12167,' y ': 13824,' t ': 6859,' p ': 3375,' d ': 27,' j ': 729,' a ': 0,' z ' : 15625, 'চ': 125, 'কিউ': 4096, 'ইউ': 8000, 'এন': 2197, 'এম': 1728, 'আর': 4913, 'কে': 1000, 'জি': 216 , 'ভি': 9261}
এই কোডটি ব্যবহার করতে পারে এমন বিভিন্ন মান সহ একাধিক তালিকার জন্য তালিকা বোঝার ব্যবহার করে অভিধান তৈরি করবে pd.DataFrame()
#Multiple lists
model=['A', 'B', 'C', 'D']
launched=[1983,1984,1984,1984]
discontinued=[1986, 1985, 1984, 1986]
#Dictionary with list comprehension
keys=['model','launched','discontinued']
vals=[model, launched,discontinued]
data = {key:vals[n] for n, key in enumerate(keys)}
enumerate
পাস হবে n
থেকে vals
প্রতিটি মেলে key
তার তালিকা সঙ্গে
আপনি প্রতিটি জোড়ার জন্য একটি নতুন ডিক তৈরি করতে এবং এটি পূর্ববর্তী ডিকের সাথে একত্রীকরণ করতে পারেন:
reduce(lambda p, q: {**p, **{q[0]: q[1]}}, bla bla bla, {})
স্পষ্টতই এই পদ্ধতির প্রয়োজন reduce
থেকে functools
।
collections.Counter
জিনিস গণনা করার জন্য ডিকের একটি বিশেষ ধরণের: তালিকার আইটেমগুলি গণনা করার জন্য অভিধান ব্যবহার করা