我有两个词:
a = {"foo":["bar","baz"]}
b = {"bar":[1,2],"baz":[9,10]}
我想合并它们,以便a("bar"
和"baz"
)的值中的每个元素都被b中的值替换,"bar"
和{{1}是键。
期望的输出:
"baz"
这就是我目前正在实施合并的方式:
{'foo': [[1, 2], [9, 10]]}
有更好的方法吗?
另外:不确定这是否适合在同一篇文章中提问,但我也想通过pyspark学习一种方法。
答案 0 :(得分:2)
你可以简单地使用列表理解:
a['foo'] = [b[el] for el in a['foo']]
答案 1 :(得分:0)
简单高效的Martijn Pieters ......
我们有一个初学者,所以我会引起对可变集合的关注。
如果b
中的列表在下面的代码中被修改,a
也将被修改。
a = {"foo": ["bar", "baz"]}
b = {"bar": [1, 2], "baz": [9, 10]}
a['foo'] = [b[el] for el in a['foo']]
expected = {'foo': [[1, 2], [9, 10]]}
assert a == expected
示例:
b["bar"][0] = 789
print(a)
assert a == expected # AssertionError
你得到:
{'foo': [[789, 2], [9, 10]]}
为避免这种情况,可以使用list()
构造函数或[:]
语法复制列表:
a['foo'] = [list(b[el]) for el in a['foo']]
# or: a['foo'] = [b[el][:] for el in a['foo']]
expected = {'foo': [[1, 2], [9, 10]]}
assert a == expected
b["bar"][0] = 789
print(a)
assert a == expected # OK
如果您真的是偏执狂,可以使用copy.deepcopy:
import copy
a['foo'] = [copy.deepcopy(b[el]) for el in a['foo']]
expected = {'foo': [[1, 2], [9, 10]]}
assert a == expected
b["bar"][0] = 789
print(a)
assert a == expected # OK