用顺序保存合并两个词典

2024-09-27 19:20:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两本字典:

a = {u'Anthracite': [u'3/optimized/8593793_fpx.tif'],
 u'Black': [u'6/optimized/8593796_fpx.tif'],
 u'Cobalt': [u'9/optimized/8593799_fpx.tif'],
 u'Fire': [u'2/optimized/8593802_fpx.tif'],
 u'Fuschia': [u'5/optimized/8593805_fpx.tif'],
 u'Iris': [u'8/optimized/8593808_fpx.tif'],
 u'Midnight': [u'1/optimized/8593811_fpx.tif']}

b = {u'Anthracite': [u'5/optimized/8593795_fpx.tif'],
 u'Black': [u'8/optimized/8593798_fpx.tif'],
 u'Cobalt': [u'1/optimized/8593801_fpx.tif'],
 u'Fire': [u'4/optimized/8593804_fpx.tif'],
 u'Fuschia': [u'7/optimized/8593807_fpx.tif'],
 u'Iris': [u'0/optimized/8593810_fpx.tif'],
 u'Midnight': [u'3/optimized/8593813_fpx.tif']}

我需要出示这样的口述:

^{pr2}$

所以我需要从具有相同键的列表中收集所有项目,但我需要保存第一个订单。在

字典总是有相同的键

我试过用拉链来做这个,但我搞得一团糟


Tags: 项目iris列表字典fireblacktif口述
3条回答

使用OrderedDict和元组列表来设置初始顺序怎么样。然后简单地维护它。在

请检查我的答案以获得更好的dict语法:Override the {...} notation so i get an OrderedDict() instead of a dict()?

from collections import OrderedDict

#Use an ordered dict, with a tuple list init to maintain initial order 
a = OrderedDict([
      (u'Anthracite', [u'3/optimized/8593793_fpx.tif']),
      (u'Black', [u'6/optimized/8593796_fpx.tif']),
      (u'Cobalt', [u'9/optimized/8593799_fpx.tif']),
      (u'Fire', [u'2/optimized/8593802_fpx.tif']),
      (u'Fuschia', [u'5/optimized/8593805_fpx.tif']),
      (u'Iris', [u'8/optimized/8593808_fpx.tif']),
      (u'Midnight', [u'1/optimized/8593811_fpx.tif'])
      ])

#We don't care about b's order
b = {u'Anthracite': [u'5/optimized/8593795_fpx.tif'],
 u'Black': [u'8/optimized/8593798_fpx.tif'],
 u'Cobalt': [u'1/optimized/8593801_fpx.tif'],
 u'Fire': [u'4/optimized/8593804_fpx.tif'],
 u'Fuschia': [u'7/optimized/8593807_fpx.tif'],
 u'Iris': [u'0/optimized/8593810_fpx.tif'],
 u'Midnight': [u'3/optimized/8593813_fpx.tif']}

merge =  OrderedDict()
#Since b has the same keys as a(we don't need to care for diffrent keys), but we want a's order
for key in a:
    #We insert by order to an OrderedDict so the same order will be maintained
    merge[key] = a[key] + b[key]

为什么不在字典上反复检查,然后把它们复制到一个新字典里呢?为了简单起见,以下代码中使用了defaultdict:

from collections import defaultdict
c = defaultdict(list)
a = {"foo": ["bar"]}
b = {"foo": ["baz"], "bah": ["foo"]}
for k, v in a.items() + b.items():
    c[k].extend(v)

如果键相同,则可以复制第一个词典并更新其内容:

^{pr2}$

注意,后者创建了一个浅拷贝,因此字典a也在这个过程中被修改。在

{1}如果你想按字母顺序排列,请使用{1}键:

from collections import OrderedDict
srt_keys = sorted(a.keys())

d = OrderedDict()
for k in srt_keys:
    d[k] = a[k] 
    d[k] += b[k]
print d

OrderedDict([(u'Anthracite', [u'3/optimized/8593793_fpx.tif', u'5/optimized/8593795_fpx.tif']), (u'Black', [u'6/optimized/8593796_fpx.tif', u'8/optimized/8593798_fpx.tif']), (u'Cobalt', [u'9/optimized/8593799_fpx.tif', u'1/optimized/8593801_fpx.tif']), (u'Fire', [u'2/optimized/8593802_fpx.tif', u'4/optimized/8593804_fpx.tif']), (u'Fuschia', [u'5/optimized/8593805_fpx.tif', u'7/optimized/8593807_fpx.tif']), (u'Iris', [u'8/optimized/8593808_fpx.tif', u'0/optimized/8593810_fpx.tif']), (u'Midnight', [u'1/optimized/8593811_fpx.tif', u'3/optimized/8593813_fpx.tif'])])

相关问题 更多 >

    热门问题