2024-06-02 06:36:48 发布
网友
假设我有这本字典:
>>> dic = {('a', 'l'):3, ('a', 'p'):2, ('b', 'l'):4, ('b', 'p'):1}
我怎样才能编辑它,这样我就可以拥有它:
>>> dic_new = {'a':{'l':3, 'p':2}, 'b':{'l':4, 'p':1}}
每次我换钥匙都会出错。我很困惑。你知道吗
您可以使用groupby+OrderedDict:
groupby
OrderedDict
from itertools import groupby from collections import OrderedDict dic = {('a', 'l'):3, ('a', 'p'):2, ('b', 'l'):4, ('b', 'p'):1} dic = OrderedDict(dic) new_d = {} for k, g in groupby(dic, lambda x: x[0]): for x in g: if k in new_d: new_d[k].update({x[1]: dic[x]}) else: new_d[k] = {x[1]: dic[x]} print(new_d) # {'a': {'l': 3, 'p': 2}, 'b': {'l': 4, 'p': 1}}
或者,如果您可以保证字典是按照元组键中的第一个值排序的,那么您可以直接忽略OrderedDict。你知道吗
在每种情况下,您都希望将d2[k1][k2]=v设置为d1[k1,k2]=v。最简单的方法是从defaultdict开始。你知道吗
d2[k1][k2]=v
d1[k1,k2]=v
>>> from collections import defaultdict >>> d1 = {('a', 'l'):3, ('a', 'p'):2, ('b', 'l'):4, ('b', 'p'):1} >>> d2 = defaultdict(dict) >>> for k1, k2 in d1: ... d2[k1][k2] = d[k1,k2] ... >>> d2 defaultdict(<class 'dict'>, {'a': {'l': 3, 'p': 2}, 'b': {'l': 4, 'p': 1}}) >>> dict(d2) {'a': {'l': 3, 'p': 2}, 'b': {'l': 4, 'p': 1}}
如果不想使用defaultdict,请使用setdefault方法。你知道吗
defaultdict
setdefault
d2 = {} for k1, k2 in d1: d2.setdefault(k1, {})[k2] = d1[k1,k2]
您可以遍历原始字典并在找到键时创建一个新字典:
dic = {('a', 'l'):3, ('a', 'p'):2, ('b', 'l'):4, ('b', 'p'):1} dic_new = {} for (new_key, new_sub_key),value in dic.items(): if new_key not in dic_new: dic_new[new_key] = {} dic_new[new_key][new_sub_key] = value print(dic_new)
{'a': {'l': 3, 'p': 2}, 'b': {'l': 4, 'p': 1}}
您可以使用
groupby
+OrderedDict
:或者,如果您可以保证字典是按照元组键中的第一个值排序的,那么您可以直接忽略
OrderedDict
。你知道吗在每种情况下,您都希望将
d2[k1][k2]=v
设置为d1[k1,k2]=v
。最简单的方法是从defaultdict开始。你知道吗如果不想使用
defaultdict
,请使用setdefault
方法。你知道吗您可以遍历原始字典并在找到键时创建一个新字典:
输出
相关问题 更多 >
编程相关推荐