用字符将列表中的两个键和对应的值连接起来

时间:2018-09-21 10:48:38

标签: python python-3.x list dictionary

我有两个清单,

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始终始终分别只有一个键值对。

2 个答案:

答案 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)

您可以使用一个小循环,然后为keysvalues格式化字符串

z = {}
for k, v in x.items():
    for a, b in y.items():
        z['{}/{}'.format(k, a)] = '{}/{}'.format(v, b)
{'name/job': 'sri/nothing'}
相关问题