পাইথন টুপল টু ডিক


149

টিপল জন্য, t = ((1, 'a'),(2, 'b')) dict(t)ফিরে{1: 'a', 2: 'b'}

{'a': 1, 'b': 2}(কি এবং vals অদলবদল করা) ভাল উপায় আছে ?

শেষ পর্যন্ত, আমি 1প্রদত্ত 'a'বা 2প্রদত্ত ফিরে আসতে সক্ষম হতে চাই 'b', সম্ভবত কোনও ডিককে রূপান্তর করা সর্বোত্তম উপায় নয়।

উত্তর:


277

চেষ্টা করুন:

>>> t = ((1, 'a'),(2, 'b'))
>>> dict((y, x) for x, y in t)
{'a': 1, 'b': 2}

8
+1 সুন্দর! আমাকে জিপ দিয়ে চেষ্টা করতে হয়েছিল dict(zip(*zip(*t)[::-1]))। এটি ধীর, কুরুচিপূর্ণ এবং আরও বেশি মেমরি ব্যবহার করছে .. সম্ভবত 3x।
কেভপি

@ কেভপী পাইথন সম্পর্কে আশ্চর্যজনক বিষয়টি হল যে কীভাবে কীভাবে করবেন তা প্রকাশ করার জন্য একশ উপায় রয়েছে, প্রতিটি পরেরটির মতোই আকর্ষণীয়।
bjd2385

দুর্দান্ত, যদি আপনার কাছে যা থাকে ত্রিগল হয় আপনি করতে পারেন: dict((x, y) for x, y, z in t)বা dict((x, (y, z)) for x, y, z in t)দ্বিতীয় হিসাবে তৃতীয় এবং তৃতীয় মান পেতে।
সাহসী

খুব দ্রুত, বিস্তৃত এবং সহজ। নিখুঁত উত্তর.
gies0r

73

একটি সামান্য সহজ পদ্ধতি:

>>> t = ((1, 'a'),(2, 'b'))
>>> dict(map(reversed, t))
{'a': 1, 'b': 2}

1
কি দ্রুত এটি তোলে?
maazza

9
মানচিত্র এবং ডিক ফাংশনগুলি সিতে প্রয়োগ করা হয়েছে এবং যেকোন অজগর সংস্করণের তুলনায় অনেক দ্রুত
জেটেরাস

1
আমি reverseস্পষ্টভাবে বানান থাকার জন্য এটি পছন্দ ।
ফ্রেরিচ রাবাবে

4
@ মাজাজা: সাধারণভাবে পারফরম্যান্স টেস্টগুলি বোঝায় যে ( mapজিনিসটি ম্যাপ করা হচ্ছে তখন অন্য কোনও অন্তর্নির্মিত ফাংশন (যেমন reversed) হ'ল ( কমপক্ষে সি বাস্তবায়নে) একটি বোধগমনের চেয়ে দ্রুত হয় ; অন্যান্য ক্ষেত্রে, বিপরীতটি সত্য। তবে অনুমানের চেয়ে প্রোফাইল করা আরও ভাল :)
কার্ল নচেটেল

43

আপনি অজগর ২.7 এ থাকলে আরও সংক্ষিপ্ত:

>>> t = ((1,'a'),(2,'b'))
>>> {y:x for x,y in t}
{'a':1, 'b':2}

9
>>> dict([('hi','goodbye')])
{'hi': 'goodbye'}

বা:

>>> [ dict([i]) for i in (('CSCO', 21.14), ('CSCO', 21.14), ('CSCO', 21.14), ('CSCO', 21.14)) ]
[{'CSCO': 21.14}, {'CSCO': 21.14}, {'CSCO': 21.14}, {'CSCO': 21.14}]

আমি দেখতে পাচ্ছি না কীভাবে এই
ওপির

4

যদি একই কীটির জন্য একাধিক মান থাকে তবে নিম্নলিখিত কোডটি সেই মানগুলিকে তাদের কী অনুসারে তালিকায় যুক্ত করবে,

d = dict()
for x,y in t:
    if(d.has_key(y)):
        d[y].append(x)
    else:
        d[y] = [x]

2

এটি করার কয়েকটি উপায় এখানে রইল:

>>> t = ((1, 'a'), (2, 'b'))

>>> # using reversed function
>>> dict(reversed(i) for i in t)
{'a': 1, 'b': 2}

>>> # using slice operator
>>> dict(i[::-1] for i in t)
{'a': 1, 'b': 2}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.