說我有一本字典詞典,具有以下值:的Python:修改一個字典,使該鍵的值,和值的鍵
dict1 = {'1': ['a','b', 'c', 'd'], '2': ['e','f', 'g', 'h']}
我怎麼會做值中的一個關鍵一個新的詞典,dict1?
dict2 = {'d': ['a','b', 'c', '1'], 'h': ['e','f', 'g', '2']}
說我有一本字典詞典,具有以下值:的Python:修改一個字典,使該鍵的值,和值的鍵
dict1 = {'1': ['a','b', 'c', 'd'], '2': ['e','f', 'g', 'h']}
我怎麼會做值中的一個關鍵一個新的詞典,dict1?
dict2 = {'d': ['a','b', 'c', '1'], 'h': ['e','f', 'g', '2']}
In [12]: d = {'1': ['a','b', 'c', 'd'], '2': ['e','f', 'g', 'h']}
In [13]: dict((v[-1],v[:-1]+[k]) for k,v in d.iteritems())
Out[13]: {'d': ['a', 'b', 'c', '1'], 'h': ['e', 'f', 'g', '2']}
k
是原始密鑰,v
是原始值(列表)。結果,v[-1]
成爲新密鑰,v[:-1]+[k]
成爲新值。
編輯正如Adrien Plisson指出的那樣,Python 3不支持iteritems
。此外,在Python 2.7+和3,可以使用字典解析:
{v[-1]: v[:-1]+[k] for k,v in d.items()} # Python 2.7+
使該鍵的值,和值的鍵:
dict2 = dict((dict1[key], key) for key in dict1)
或
dict2 = dict((value,key) for key, value in dict1.items())
兩者都適用於所有版本的Python。
特例
只有在問題這不工作的例子的特殊情況,因爲列表不能用作鍵。因此,使用每個列表作爲關鍵的最後一個元素,並與以前的鑰匙替換最後這個問題,我們得到了更復雜:
dict2 = dict((dict1[key][-1], dict1[key][:-1]+[key]) for key in dict1)
注意,在Python 3.0,dict.iterkeys(), dict.itervalues(), and dict.iteritems()
不再有效。 dict.keys(), dict.values(), and dict.items()
都行。只需迭代一個字典(如for key over dict1
)即可返回密鑰列表。通常使用的是分類鍵在
keys = sorted(mydict)
而另一種方法:
dict1 = {'1': ['a','b', 'c', 'd'], '2': ['e','f', 'g', 'h']}
dict2 = {}
for k in dict1:
dict2[dict1[k][-1]]= dict1[k]
dict2[dict1[k][-1]][-1] = k
print dict2 #{'h': ['e', 'f', 'g', '2'], 'd': ['a', 'b', 'c', '1']}
哪個值應成爲關鍵? – Patrick
@Patrick:值列表中的最後一個變量。 – user725236
dict是內建的,你不應該把它用作變量名。 –