তালিকা বোধগম্য সঙ্গে একটি অভিধান তৈরি করুন


1276

আমি পাইথন তালিকা বোঝার বাক্যটি পছন্দ করি like

এটি অভিধান তৈরি করতেও ব্যবহার করা যেতে পারে? উদাহরণস্বরূপ, কী এবং মানগুলির জোড়ায় পুনরাবৃত্তি করে:

mydict = {(k,v) for (k,v) in blah blah blah}  # doesn't work

সম্পর্কিত: collections.Counterজিনিস গণনা করার জন্য ডিকের একটি বিশেষ ধরণের: তালিকার আইটেমগুলি গণনা করার জন্য অভিধান ব্যবহার করা
স্মিচ

উত্তর:


1895

পাইথন 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))

1
যদি আমার শব্দের ['বিড়াল', 'কুকুর', 'বিড়াল'] এর তালিকার একটি মামলা থাকে এবং আমি কী হিসাবে শব্দ এবং মান হিসাবে মান হিসাবে একটি ডিক তৈরি করতে চাই? এর জন্য কি কোনও সংক্ষিপ্ত দক্ষ বাক্য গঠন আছে?
2:30:30 এ ক্রিটনভূ

@cryanbhu কি আপনি কি বোঝাতে চেয়েছেন তালিকায় একটি প্রদত্ত উপাদানের পুনরাবৃত্তির গণনা থাকলে, সেক্ষেত্রে সংগ্রহের প্যাকেজের মধ্যে একটি কাউন্টার বর্গ আছে: docs.python.org/2/library/collections.html#collections.Counter
ফোরট্রান


57

প্রকৃতপক্ষে, আপনার পুনরাবৃত্তির উপরে পুনরাবৃত্তি করার দরকার নেই যদি এটি ইতিমধ্যে কোনও ধরণের ম্যাপিং বোঝে তবে ডিক নির্মাতা এটি আপনার জন্য করুণাময়ভাবে করছেন:

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


32

পাইথনে তালিকা বোঝার জন্য একটি অভিধান তৈরি করুন

আমি পাইথন তালিকা বোঝার বাক্যটি পছন্দ করি 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 দিয়ে বিভাজ্য হয় কিনা তা আমরা এখানে পরীক্ষা করছি।


23

পাইথন সংস্করণ <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]}

22

@ ফরট্রানের উত্তর যুক্ত করতে, আপনি কীগুলির তালিকার key_listপাশাপাশি মানগুলির তালিকাতে পুনরাবৃত্তি করতে চান value_list:

d = dict((key, value) for (key, value) in zip(key_list, value_list))

অথবা

d = {(key, value) for (key, value) in zip(key_list, value_list)}

6

ডিক বোঝার সাহায্যে অভিধান তৈরির আরেকটি উদাহরণ এখানে দেওয়া হয়েছে:

আমি এখানে যা করতে চাইছি তা হল একটি বর্ণমালা অভিধান তৈরি করা যেখানে প্রতিটি জুটি; এটি ইংরেজি বর্ণ এবং ইংরেজি বর্ণমালায় এর সম্পর্কিত অবস্থান

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

তালিকায় বর্ণমালা এবং তাদের সূচকের তালিকা পেতে এবং অভিধানের মূল কী জোড় তৈরি করতে বর্ণমালা এবং সূচকগুলি অদলবদল করতে এখানে গণকের ব্যবহারের বিষয়টি লক্ষ্য করুন

আশা করি এটি আপনার কাছে অভিধানের কমপ সম্পর্কে একটি ভাল ধারণা দেয় এবং আপনার কোডকে কমপ্যাক্ট তৈরি করতে আপনাকে আরও বেশিবার এটি ব্যবহার করতে উত্সাহিত করে


1
উত্তম উত্তর - সরলীকৃত:d = {k: v+1 for v, k in enumerate(string.ascii_lowercase)}
জননিডার্ম

4

এটা চেষ্টা কর,

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


2
>>> {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}


2

এই কোডটি ব্যবহার করতে পারে এমন বিভিন্ন মান সহ একাধিক তালিকার জন্য তালিকা বোঝার ব্যবহার করে অভিধান তৈরি করবে 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তার তালিকা সঙ্গে


1

শুধু অন্য উদাহরণে ফেলে দিতে। আপনার নীচের তালিকা রয়েছে তা কল্পনা করুন:

nums = [4,2,2,1,3]

এবং আপনি এটিকে একটি ডিকে পরিণত করতে চান যেখানে মূল সূচক এবং মানটি তালিকার উপাদান। আপনি নিম্নলিখিত কোডের লাইন দিয়ে এটি করতে পারেন:

{index:nums[index] for index in range(0,len(nums))}

0

আপনি প্রতিটি জোড়ার জন্য একটি নতুন ডিক তৈরি করতে এবং এটি পূর্ববর্তী ডিকের সাথে একত্রীকরণ করতে পারেন:

reduce(lambda p, q: {**p, **{q[0]: q[1]}}, bla bla bla, {})

স্পষ্টতই এই পদ্ধতির প্রয়োজন reduceথেকে functools


একই ধারণা: হ্রাস করুন (ল্যাম্বদা পি, কিউ: {** পি, ** ডিক ([কিউ])}, ব্লে ব্লে ব্লা, {})
মাহমুদ খালেদ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.