我有两个清单,
x = [{'name':'sri'}], y= [{'job':'nothing'}]
我想将两个键合并为一个键,并将值合并为一个值,例如
z = [{'name/job':'sri/nothing'}]
我尝试了以下
z = x.update(y[0])
z[0:1] = ["/".join(z[0:1])]
但是它显示列表没有更新属性错误。
我尝试将两个列表合并在一起
z = x+y
# z=[{'name':'sri'},{'job':'nothing'}]
并尝试组合键,但找不到解决方案
注意:x和y始终始终分别只有一个键值对。
答案 0 :(得分:3)
您需要使用map
来配对字典,然后将每对中的键值对配对以生成输出字典:
zip()
演示:
result = [
{'{}/{}'.format(k1, k2): '{}/{}'.format(v1, v2) for (k1, v1), (k2, v2) in zip(d1.items(), d2.items())}
for d1, d2 in zip(x, y)
]
上面的列表和dict理解组合基本上是这样做的:
>>> x = [{'name': 'sri'}]
>>> y = [{'job': 'nothing'}]
>>> [
... {'{}/{}'.format(k1, k2): '{}/{}'.format(v1, v2) for (k1, v1), (k2, v2) in zip(d1.items(), d2.items())}
... for d1, d2 in zip(x, y)
... ]
[{'name/job': 'sri/nothing'}]
,但没有中间变量。
该解决方案假定result = []
for d1, d2 in zip(x, y):
# d1 and d2 are a pair of dictionaries from lists x and y, respectively.
newdict = {}
for (k1, v1), (k2, v2) in zip(d1.items(), d2.items()):
# k1 and v1 are a key-value pair from d1, and
# k2 and v2 are a key-value pair from d2. This loop runs just once
# when your input dictionaries have only one key-value each.
key = '{}/{}'.format(k1, k2) # new key with k1/k2 combined
value = '{}/{}'.format(v1, v2) # new value with v1/v2 combined
newdict[key] = value
result.append(newdict)
和x
由相等数量的字典组成(列表之一中的任何其他元素都将被忽略)。假定每个字典对都具有相同数量的键值对(同样,一个字典中的额外键值对将被忽略),并且任何字典对的键值对都以当前字典顺序组合。对于只有一个键的字典,每个顺序都没有关系。
答案 1 :(得分:1)
您可以使用一个小循环,然后为keys
和values
格式化字符串
z = {}
for k, v in x.items():
for a, b in y.items():
z['{}/{}'.format(k, a)] = '{}/{}'.format(v, b)
{'name/job': 'sri/nothing'}