আমি কীভাবে একটি অভিধানকে টিপলসের তালিকায় রূপান্তর করতে পারি?


219

আমার কাছে যদি অভিধান থাকে তবে:

{ 'a': 1, 'b': 2, 'c': 3 }

আমি কীভাবে এটিকে রূপান্তর করতে পারি?

[ ('a', 1), ('b', 2), ('c', 3) ]

এবং আমি কীভাবে এটিকে রূপান্তর করতে পারি?

[ (1, 'a'), (2, 'b'), (3, 'c') ]

7
[tuple(reversed(x)) for x in d.items()]
গেরেজ

1
@ গারেজ: আপনার কোডটিতে xইতিমধ্যে একটি দেওয়া হয়েছে tuple(এটির itemsপুনরাবৃত্তি তৈরির প্রকৃতি tuple), এটি করা সহজ / দ্রুত হবে [x[::-1] for x in d.items()]; বিপরীতমুখী স্লাইস একটি পুনরুক্তিকারী থেকে কন্সট্রাক্টর পুনরাবৃত্তভাবে জনবহুল (সামগ্রিকভাবে এবং পুনরায় আকার দিয়ে) পপুলেশন tupleকরার পরিবর্তে যথাযথ আকারের বিপরীতটি সরাসরি তৈরি করে । tupletuplereversed
শ্যাডোএ্যাঞ্জার

@ শ্যাডোএ্যাঞ্জার, আপনি ঠিক বলেছেন আমি কেবল স্পষ্ট করে বলতে চেয়েছিলাম যে k, vএ জাতীয় ক্ষেত্রে সবসময় প্যাটার্নের প্রয়োজন হয় না ।
গ্যারেজ

দ্রষ্টব্য:compatibility py2.x // py3.x পার্থক্যের কারণে ট্যাগ যুক্ত
dreftymac

উত্তর:


360
>>> d = { 'a': 1, 'b': 2, 'c': 3 }
>>> d.items()
[('a', 1), ('c', 3), ('b', 2)]
>>> [(v, k) for k, v in d.iteritems()]
[(1, 'a'), (3, 'c'), (2, 'b')]

এটি আপনি চান ক্রমে নয়, তবে ডিক্টের কোনওভাবেই নির্দিষ্ট আদেশ নেই। 1 এটি বাছাই করুন বা এটি প্রয়োজনীয় হিসাবে সংগঠিত করুন।

দেখুন: আইটেম () , এটিরাইটস ()


পাইথন ৩.x-এ, আপনি ব্যবহার করবেন না iteritems(যা এখন আর বিদ্যমান নেই), পরিবর্তে ব্যবহার করুন items, যা এখন অভিধানের আইটেমগুলিতে একটি "দর্শন" দেয়। দেখুন নতুন কি নতুন পাইথন 3.0 জন্য নথি, এবং মতামত উপর ডকুমেন্টেশন

1: ডিক্টসের জন্য সন্নিবেশ-আদেশ সংরক্ষণ পাইথন 3.7-এ যুক্ত করা হয়েছিল


8
আইটেম () পাইথন 3 এ একটি ডিক_কিজ ভিউ প্রদান করে। একটি তালিকা "তালিকা ()" তে একটি কাস্টের সাহায্যে এই কলটি মোড়ানো। @ সাইলেন্টগোস্টের উত্তর দেখুন
এরিচ

55

যেহেতু অন্য কেউ করেনি, আমি পাই 3 কে সংস্করণ যুক্ত করব:

>>> d = { 'a': 1, 'b': 2, 'c': 3 }
>>> list(d.items())
[('a', 1), ('c', 3), ('b', 2)]
>>> [(v, k) for k, v in d.items()]
[(1, 'a'), (3, 'c'), (2, 'b')]

18

আপনি তালিকা বোঝার ব্যবহার করতে পারেন।

[(k,v) for k,v in a.iteritems()] 

আপনি পাবেন [ ('a', 1), ('b', 2), ('c', 3) ]এবং

[(v,k) for k,v in a.iteritems()] 

অন্য উদাহরণ।

আপনি যদি পছন্দ করেন তবে তালিকার বোধগম্যতা সম্পর্কে আরও পড়ুন , আপনি তাদের সাথে কী করতে পারেন তা খুব আকর্ষণীয়।


10

নেমডটপলসের একটি তালিকা তৈরি করুন

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

d = {'John':5, 'Alex':10, 'Richard': 7}

আপনি আইটেমগুলিকে টিপলস হিসাবে তালিকাবদ্ধ করতে পারেন, আপনি চান তা অনুসারে বাছাই করতে পারেন এবং নাম এবং স্কোর পেতে পারেন, আসুন সর্বোচ্চ স্কোর (সূচক = 0) এর সাথে প্লেয়ারটিকে একেবারে পাইথোনিকভাবে বলতে পারি:

>>> player = best[0]

>>> player.name
        'Alex'
>>> player.score
         10

কিভাবে এই কাজ করতে:

এলোমেলো ক্রম বা সংগ্রহের ক্রম রাখার তালিকায় রাখুন r আরআর্টডিক্ট :

import collections
Player = collections.namedtuple('Player', 'name score')
players = list(Player(*item) for item in d.items())

ক্রমানুসারে, মান অনুসারে বাছাই ('স্কোর'):

import collections
Player = collections.namedtuple('Player', 'score name')

প্রথমে সর্বনিম্ন স্কোর অনুসারে বাছাই করা:

worst = sorted(Player(v,k) for (k,v) in d.items())

প্রথমে সর্বোচ্চ স্কোর অনুসারে বাছাই করা:

best = sorted([Player(v,k) for (k,v) in d.items()], reverse=True)

7

আপনি কি চান dictএর items()এবং iteritems()পদ্ধতি। items(কী, মান) টিউপসগুলির একটি তালিকা প্রদান করে। যেহেতু টিপলগুলি পরিবর্তনযোগ্য, সেগুলি বিপরীত হতে পারে না। সুতরাং, আপনাকে বিপরীতমুখী (মান, কী) টিপলস পেতে আইটেমগুলি পুনরাবৃত্তি করতে হবে এবং নতুন টিপলস তৈরি করতে হবে। পুনরাবৃত্তির জন্য, iteritemsএটি পুরো তালিকায় মেমরির মধ্যে রাখার পরিবর্তে (কী, মান) টিপলস উত্পাদন করতে একটি জেনারেটর ব্যবহার করা পছন্দনীয়।

Python 2.5.1 (r251:54863, Jan 13 2009, 10:26:13) 
[GCC 4.0.1 (Apple Inc. build 5465)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> a = { 'a': 1, 'b': 2, 'c': 3 }
>>> a.items()
[('a', 1), ('c', 3), ('b', 2)]
>>> [(v,k) for (k,v) in a.iteritems()]
[(1, 'a'), (3, 'c'), (2, 'b')]
>>> 


5

এটি পাইথন 3.x এবং পাইথন 2.x এর ব্রেকিং পরিবর্তন

পাইথন 3.x ব্যবহারের জন্য

dictlist = []
for key, value in dict.items():
    temp = [key,value]
    dictlist.append(temp)

পাইথন ২.7 ব্যবহারের জন্য

dictlist = []
for key, value in dict.iteritems():
    temp = [key,value]
    dictlist.append(temp)

4
>>> a = {'a': 1, 'খ': 2, 'সি': 3

>>> [(এক্স, এ [এক্স]) এক্স এর জন্য a.keys ()]
[('a', 1), ('সি', 3), ('বি', 2)]

>>> [(a [x], x) x এর জন্য a.keys ()]
[(1, 'এ'), (3, 'সি'), (2, 'বি')]

4

দ্বারা keys()এবং values()অভিধানের পদ্ধতি এবংzip

zip অর্পিত অভিধানের মতো কাজ করে এমন টিপলগুলির একটি তালিকা ফেরত দেবে।

ডেমো:

>>> d = { 'a': 1, 'b': 2, 'c': 3 }
>>> zip(d.keys(), d.values())
[('a', 1), ('c', 3), ('b', 2)]
>>> zip(d.values(), d.keys())
[(1, 'a'), (3, 'c'), (2, 'b')]

collections.OrderedDict()পাইথন এইচটিটিপি রিকুয়েস্টেস লিবের একাধিক সংস্করণের সাথে আরও ভাল কাজ করে এমন বিকল্প হিসাবে এটি আমার পক্ষে কাজ করেছিল। যদিও আমি zipফাংশনটির নামটি কিছুটা অস্পষ্ট / অতিরিক্ত বোঝা হিসাবে অপছন্দ করি ।
মার্কহু

নোট করুন zip-করণটি "গভীর" ingালাই নয়, অর্থাত্ যদি নেস্টেড শিশুরা থাকে তবে তারা ক্ষতিগ্রস্থ হবে না। আপনার নিজের পুনরাবৃত্তি রোল করতে হতে পারে।
মার্কহু

3
d = {'John':5, 'Alex':10, 'Richard': 7}
list = []
for i in d:
   k = (i,d[i])
   list.append(k)

print list

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

3

একটি সহজ এক হবে

list(dictionary.items())  # list of (key, value) tuples
list(zip(dictionary.values(), dictionary.keys()))  # list of (key, value) tuples

দ্বিতীয়টি কোনও সরল নয় তবে হ্যাঁ।

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