পাইথন অভিধান: কীগুলি () এবং মানগুলি () সর্বদা একই থাকে?


312

দেখে মনে হচ্ছে যে তালিকাগুলি ফিরে এসেছে keys()এবং values()অভিধানের পদ্ধতিগুলি সর্বদা 1-থেকে -1 ম্যাপিং হয় (ধরে নিই যে অভিধানটি 2 টি পদ্ধতি কল করার মধ্যে পরিবর্তন করা হয় না)।

উদাহরণ স্বরূপ:

>>> d = {'one':1, 'two': 2, 'three': 3}
>>> k, v = d.keys(), d.values()
>>> for i in range(len(k)):
    print d[k[i]] == v[i]

True
True
True

আপনি যদি কলিং keys()এবং কল করার মধ্যে অভিধানটি পরিবর্তন না করেন values()তবে উপরের ফর-লুপটি কি সর্বদা সত্য মুদ্রণ করবে তা অনুমান করা কি ভুল? আমি এটি নিশ্চিত করে কোনও ডকুমেন্টেশন পাইনি।


1
সিপিথন ৩.7 (এবং সম্ভবত, সম্ভবত) আপনি একটি অভিধানের সাথে মিলের সন্নিবেশ ক্রমের পুনরাবৃত্তির ক্রমের উপর নির্ভর করতে পারেন। mail.python.org/pipermail/python-dev/2017- ডিসেম্বার
বলপয়েন্টবেন

@ বালপয়েন্টপথ এটি সিপথন ৩.6 এ এবং তার উপরে এবং অন্যান্য সমস্ত পাইথন বাস্তবায়ন পাইথন ৩.7 দিয়ে শুরু হচ্ছে
বোরিস

উত্তর:


353

এটি পাওয়া গেছে:

তাহলে items(), keys(), values(), iteritems(), iterkeys(), এবং itervalues()অভিধান কোন হস্তক্ষেপ সংশোধনসহ বলা হয়, তালিকা সরাসরি মিলা হবে।

উপর 2.x ডকুমেন্টেশন এবং 3.x ডকুমেন্টেশন


5
স্পষ্টতই 3.x ডকুমেন্টেশনের বিবৃতিটি আরও স্পষ্ট: "আইটেমগুলির
ক্রমটি

4
এই পাঠ্যটি 3.7 নথিভুক্ত রয়েছে। আমি কেবল এটি ধরে নিতে পারি কারণ "ডিক্ট সন্নিবেশনের আদেশটি রাখে" 3.7 এ: mail.python.org/pipermail/python-dev/2017- ডিসেম্বর
এলিয়্যাডএল

80

হ্যাঁ, আপনি যা পর্যবেক্ষণ করেছেন তা হ'ল একটি গ্যারান্টেড সম্পত্তি - কী (), মান () এবং আইটেমগুলি () ডিকটি পরিবর্তন না করা হলে একত্রিত ক্রমে তালিকাগুলি ফেরত দেয়। iterkeys () এবং সি একই তালিকার সাথে একই তালিকাতে পুনরাবৃত্তি করে।


1
যাইহোক, যদি তালিকায় হয় রদবদল, পান্ডাস dataframeএকটি বিকল্প যেখানে আইটেম আপডেট বা মোছা যাবে না, এবং অর্ডার ও একটি আইটেমের সূচীপত্র অবস্থানে উপলব্ধ করা হয় অভি মত গঠন স্থির।
ভিল


7

হ্যাঁ. সিপথন ৩.6 দিয়ে শুরু করে অভিধানগুলি আইটেমগুলিকে আপনি যেভাবে সন্নিবেশ করিয়েছিল সেভাবে ফিরিয়ে দেয়

যে অংশটি বলছে এটি উপেক্ষা করুন এটি বাস্তবায়নের বিশদ। এই আচরণটি সিপথন ৩.6 এ গ্যারান্টিযুক্ত এবং পাইথন ৩.7 দিয়ে শুরু হওয়া অন্যান্য সমস্ত পাইথন বাস্তবায়নের জন্য প্রয়োজনীয়


6

দস্তাবেজের জন্য ভাল রেফারেন্স। ডকুমেন্টেশন / বাস্তবায়ন নির্বিশেষে আপনি কীভাবে আদেশটিকে গ্যারান্টি দিতে পারবেন তা এখানে:

k, v = zip(*d.iteritems())

1
পাইথন ৩.x-এ, ডিক্টিমাইটস () ব্যবহার করুন
গুড উইল

4

মতে http://docs.python.org/dev/py3k/library/stdtypes.html#dictionary-view-objects , কি (), মান () এবং আইটেম () একটি অভি পদ্ধতি সংশ্লিষ্ট iterators কার নির্দেশে ফিরে আসবে মিলা। তবে আমি একই জিনিসটির জন্য পাইথন ২.x এর সরকারী নথিভুক্তির কোনও উল্লেখ খুঁজে পাচ্ছি না।

আমি যতদূর বলতে পারি উত্তরটি হ্যাঁ, তবে কেবল অজগর 3.0+ এ


4

এটির মূল্যের জন্য, আমি লিখেছি এমন কিছু ভারী ব্যবহৃত প্রোডাকশন কোড এই অনুমানের উপর ভিত্তি করে এবং এটিতে আমার কখনও সমস্যা হয়নি। আমি জানি যে এটি সত্য করে না যদিও :-)

আপনি যদি ঝুঁকি নিতে না চান তবে আমি যদি এটি করতে পারি তবে আমি iteritems () ব্যবহার করব।

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

-2

আমি এই উত্তরগুলির সাথে সন্তুষ্ট ছিলাম না যেহেতু আমি নিশ্চিত করতে চেয়েছিলাম যে রফতানির মানগুলি বিভিন্ন ডিক্ট ব্যবহার করার পরেও একই ক্রমযুক্ত ছিল।

এখানে আপনি কী অর্ডারটি সম্মুখভাগে উল্লেখ করেছেন, ডটার পরিবর্তন হলেও, আপনি পৃথক ডিক ব্যবহার করলেও প্রত্যাবর্তিত মানগুলির সর্বদা একই ক্রম থাকবে।

keys = dict1.keys()
ordered_keys1 = [dict1[cur_key] for cur_key in keys]
ordered_keys2 = [dict2[cur_key] for cur_key in keys]
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.