পাইথনে একটি তালিকা এবং খালি মান দিয়ে কীগুলি দিয়ে একটি ডিকের সূচনা কীভাবে করবেন?


251

আমি এটি থেকে পেতে চাই:

keys = [1,2,3]

এটি:

{1: None, 2: None, 3: None}

এটি করার একটি অজগর উপায় আছে?

এটি এটি করার একটি কুশ্রী উপায়:

>>> keys = [1,2,3]
>>> dict([(1,2)])
{1: 2}
>>> dict(zip(keys, [None]*len(keys)))
{1: None, 2: None, 3: None}

উত্তর:


388

dict.fromkeys([1, 2, 3, 4])

এটি আসলে একটি শ্রেণিবদ্ধ, সুতরাং এটি ডিক-সাবক্লাসগুলির collections.defaultdictজন্যও (যেমন ) কাজ করে। Alচ্ছিক দ্বিতীয় তর্কটি কীগুলির জন্য ব্যবহারের মান নির্দিষ্ট করে (এতে ডিফল্ট None)


153
পরিবর্তনীয় dict.fromkeys([1, 2, 3], [])কোনও কিছুর সাথে আরম্ভ করার বিষয়ে সতর্ক থাকুন: আপনি যদি কল করেন, যেমন , সমস্ত কীগুলি একই তালিকায় ম্যাপ করা থাকে এবং একটিতে পরিবর্তন করে সেগুলি সমস্ত পরিবর্তন করে ify
Charleslparker

8
দিয়ে শুরু {k:[] for k in [1, 2, 3]}করা এখনও নিরাপদ।
আজিজ আল্টো

262

কেউ ডিক-বোধগম্য সমাধান দেয়ার কোন যত্ন নেননি?

>>> keys = [1,2,3,5,6,7]
>>> {key: None for key in keys}
{1: None, 2: None, 3: None, 5: None, 6: None, 7: None}

32
আমি বিশ্বাস করি এটি
wim

21
এটি দুর্দান্ত এবং গ্রহণযোগ্য উত্তরটি রেফারেন্স ইস্যুতে ভুগবে না।
Charleslparker

এটি আপনাকে একটি ডিফল্ট মান (যেমন False) নির্ধারণ করতে দেয় ।
neverendingqs

এটি পাইথন 3 আইএমও
বেদে কনস্টান্টিনাইডস

4
ডিক্ট-কম্প ব্যবহার করে মানটি কোনও ফাংশন (যা ইচ্ছা হলে কী হিসাবে আর্গুমেন্ট হিসাবে পাস করা যেতে পারে) বলার ফলাফল হতে দেয় - এটি একটি খুব শক্তিশালী প্রক্রিয়া।
মার্টিনো

56
dict.fromkeys(keys, None)

2
দুর্দান্ত, আমি খালি তালিকা চেয়েছিলাম,dict.fromkeys(keys, [])
মিউন

12
@ মুমন এটি অবশ্যই আপনি যা চান তা নয়, চার্লসপার্কার মন্তব্য দেখুন
22:56

পাইথন সংস্করণ ২.6.। এ কাজ করে।
মাইক ফিঞ্চ

2
সাবধানতা: এটি একই কী মানের সমস্ত কী পয়েন্ট দিয়ে ডিকের সূচনা করবে
মেন্দি বেরেল

16
>>> keyDict = {"a","b","c","d"}

>>> dict([(key, []) for key in keyDict])

আউটপুট:

{'a': [], 'c': [], 'b': [], 'd': []}

1
যদিও এই কোডটি প্রশ্নের উত্তর দিতে পারে, কীভাবে এবং / বা কেন এটি সমস্যার সমাধান করে তা সম্পর্কিত অতিরিক্ত প্রসঙ্গ সরবরাহ করলে উত্তরের দীর্ঘমেয়াদী মান উন্নত হবে।
ফ্রান্সেসকো মেনজানি

4
নামটি keyDictবিভ্রান্তিমূলক, যেমন কোডের প্রথম লাইনটি a set, একটি নয় dict
ব্রায়ান ওকলে

10
d = {}
for i in keys:
    d[i] = None

1
কেন পাইথন মত একটি ত্রুটি বর্জন না: TypeError: 'type' object is not iterable?
ফ্যাকফি

1
@ ফ্রেঞ্চসকোস্টেল্লানি কারণ listএটি একটি প্রকার। আপনার মতো কিছু list = []না থাকলে উপরের পদ্ধতিটি সর্বদা আপনাকে একই ত্রুটি দেয়
স্মাক 89

1

ইন অনেক কর্মপ্রবাহ যেখানে আপনি নির্বিচারে কী জন্য একটি ডিফল্ট / প্রাথমিক মান সংযুক্ত করতে চান, আপনি না প্রয়োজন হ্যাশ প্রতিটি চাবি স্বতন্ত্রভাবে এগিয়ে সময়। আপনি ব্যবহার করতে পারেন collections.defaultdict। উদাহরণ স্বরূপ:

from collections import defaultdict

d = defaultdict(lambda: None)

print(d[1])  # None
print(d[2])  # None
print(d[3])  # None

এটি আরও দক্ষ, এটি তাত্ক্ষণিক সময়ে আপনার সমস্ত কীগুলি হ্যাশ করে সংরক্ষণ করে। তদুপরি, defaultdictএটি একটি সাবক্লাস dict, তাই সাধারণত কোনও নিয়মিত অভিধানে ফিরে রূপান্তর করার প্রয়োজন হয় না।

ওয়ার্কফ্লোগুলির জন্য যেখানে আপনার অনুমতিযোগ্য কীগুলিতে নিয়ন্ত্রণ প্রয়োজন , আপনি dict.fromkeysস্বীকৃত উত্তর হিসাবে ব্যবহার করতে পারেন :

d = dict.fromkeys([1, 2, 3, 4])
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.