如何仅将值从一本字典复制到另一本字典?

时间:2021-06-29 18:15:46

标签: python dictionary

我有两个具有多个值的字典:

t={'Musée de Armée':130102845,48.8570374,2.3118779}

而另一个 s 是 t 的排序有序字典:

s={'193 Gallery':3359610327,48.8624495,2.3652262}

两个字典的长度都是 800,我想合并两个字典,同时保留它们的值,这样最终结果是:

t={'Musée de Armée':130102845,48.8570374,2.3118779,'193 Gallery',3359610327,48.8624495,2.3652262}

这是我尝试过的:

s = OrderedDict(sorted(t.items()))
for k,v in t,s:
    t[k].append(s.values())

它给我一个关于解包的值太多的错误。 所以我想将已排序和未排序的字典合二为一。

4 个答案:

答案 0 :(得分:1)

通常,您可以像这样从另外两个创建一个新的 OrderedDict:

my_od = OrderedDict(**s, **t)

答案 1 :(得分:0)

你可以试试:

from collections import defaultdict

u = defaultdict(list)
for k, v in in s, t:
  u[k].extend(v)

答案 2 :(得分:0)

对于那些回答我的问题并提供指导的人,感谢您的帮助。发布此问题后的第二天,我找到了解决方案。我只是没有时间发布它。

然而,对我有用的是以类似数组的方式遍历字典项和 zip 方法:< /p> <块引用>

zip(*iterables)


制作一个迭代器,聚合来自每个可迭代对象的元素。
返回元组的迭代器,其中第 i 个元组包含来自每个参数序列或可迭代对象的第 i 个元素。当最短的输入迭代用完时,迭代器停止。使用单个可迭代参数,它返回一个 1 元组的迭代器。没有参数,它返回一个空的迭代器。

迭代的从左到右的评估顺序是有保证的。这使得使用 zip(*[iter(s)]*n) 将数据系列聚类为 n 长度组的习语成为可能。这将重复相同的迭代器 n 次,以便每个输出元组都有对迭代器进行 n 次调用的结果。这具有将输入分成 n 个长度的块的效果。

zip() 应仅在您不关心来自较长迭代的尾随不匹配值时与不等长输入一起使用。如果这些值很重要,请改用 itertools.zip_longest()。

zip() 与 * 运算符结合可用于解压缩列表

这就是我所做的:

d = dict()
for (k, v), (k2, v2) in zip(t.items(), s.items()):
        d[k] = [v[0], v[1], v[2], k2, v2[0], v2[1], v2[2]]

答案 3 :(得分:0)

zip 当你有配对元素时,确实是一个很好的工具,就像你的情况一样。由于您没有在问题中说值中总是恰好有三个数字,因此这里有一个更通用的解决方案,它也按您的意图修改了 t

for key, (newkey, newval) in zip (t, s.items()):
    t[key].extend([ newkey ] + newval)

这会将 s 中的键和值附加到 t 中的条目。或者您可以分两步完成,这是一个品味问题:

for key, (newkey, newval) in zip (t, s.items()):
    t[key].append(newkey) 
    t[key].extend(newval)