![](/img/trans.png)
[英]Is it possible to have nested dictionary using setdefault, appending to a list?
[英]Removing duplicates from a list in a nested dictionary using setdefault()
我正在创建一个嵌套字典,其中内部字典值部分将是一个应该保持顺序的列表。 我可以实现一个解决方案,但是当我第一次创建字典(dict1)而不是使用另一个字典(dict2)来实现这个时,我想这样做? 由于我使用的是使用 jython 作为解释器的点火设计器,因此为了简单和可能的混淆,我省略了一些代码。 这个想法大部分应该是不言自明的。
example: {20:{Mon Apr 04 00:00:00 CDT 2022: [90, 90, 1, 1, 2, 3, 4, 5]}} = {20:{Mon Apr 04 00:00:00 CDT 2022: [90, 1, 2, 3, 4, 5]}}
dict1, dict2 = defaultdict(dict), defaultdict(dict)
# Nested dictionary with duplicates and order.
for i in dataset1:
for j dataset2:
dict1[i[0]].setdefault(j[0], []).append(round(j[1], 2))
# Nested dictionary with no duplicates and no order.
for i in dataset1:
for j dataset2:
dict1[i[0]].setdefault(j[0], set()).add(round(j[1], 2))
# Here I'm able to remove the duplicates and keep order but would like to do this
# when I'm first creating the dictionary (dict1)?
dict2 = {i:{j:sorted(set(k), key=k.index) for j, k in dict1[i].items()} for i in dict1}
dict
或 - 传统上 - collections.OrderedDict
保留插入顺序:
from collections import OrderedDict, defaultdict
class OrderedSet(OrderedDict):
def add(self, x):
self[x] = None
>>> dict1 = defaultdict(lambda: defaultdict(OrderedSet))
>>> dict1[1][2].add(4)
>>> dict1[1][2].add(3)
>>> dict1[1][2].add(5)
>>> dict1[1][2].add(4)
>>> list(dict1[1][2])
[4, 3, 5]
由于您已标记Python-2.7
,因此您可以使用OrderedDict
来获取有序集,因为 dict 不保留顺序。
from collections import OrderedDict
def ordered_set(values):
d = OrderedDict()
for v in values:
d[v] = None
return list(d.keys())
dict1 = {k: {k2: ordered_set(v2) for k2, v2 in dict1[k].items()} for k,v in dict1.items()}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.