如何将列表、元组和字典合并成一个字典?

5
如何将列表、元组和字典合并为一个字典?
['f','b','c','d'] (1,2,3) and {'a':'10'}
d excluded for list be compatible with the tuple

output {'f':'1','b':'2','c':'3','a':'10'}

1
一般来说,没有一个好的方法可以解决这个问题。你能提供任何条件吗? - aaronasterling
输出不是一个有效的字典:它有重复的键。您还应该使从列表和元组中组合数据的逻辑更清晰。 - chryss
7个回答

8

您可以使用以下方式从键和值创建一个dict

keys = ['a','b','c','d']
values = (1,2,3)
result = dict(zip(keys, values)) # {'a': 1, 'c': 3, 'b': 2}

然后您可以使用另一个字典对其进行更新。
result.update({ 'f' : 5 })
print result # {'a': 1, 'c': 3, 'b': 2, 'f': 5}

4
dict(zip(a_list, a_tuple)).update(a_dictionary)

当a_list是您的列表,a_tuple是您的元组,a_dictionary是您的字典时。
编辑: 如果您真的想将元组中的数字转换为字符串,则首先执行:
new_tuple = tuple((str(i) for i in a_tuple))

并将新元组传递给zip函数。

1
这将完成您问题的第一部分:
dict(zip(['a','b','c','d'], (1,2,3)))

然而,你问题的第二部分需要一个'a'的第二个定义,而字典类型不允许这样。但是,你总是可以手动设置额外的键:

>>> d = {}
>>> d['e'] = 10
>>> d
{'e':10}

0
>>> l = ['a','b','c','d']
>>> t = (1,2,3)
>>> d = {'a':'10'}
>>> t = map(str, t)  # the OP has requested str values, let's do this first

如果您可以接受更改原始字典,那么您只需执行以下操作:
>>> d.update(zip(l, t))

或者在 Python 3.9+(PEP 584)中:

>>> d |= zip(l, t)

但是如果你需要保留原始的d

>>> new_d = dict(zip(l, t))
>>> new_d |= d

0
字典中的键必须是唯一的,因此这部分:{'a':'1','a':'10'} 是不可能的。

以下是其余代码:

l = ['a','b','c','d']
t = (1,2,3)

d = {}
for key, value in zip(l, t):
    d[key] = value

0

像这样吗?

>>> dict({'a':'10'}.items() + (zip(['f','b','c','d'],('1','2','3'))))
{'a': '10', 'c': '3', 'b': '2', 'f': '1'}

0

由于还没有人给出将元组项转换为字符串的答案

>>> L=['f','b','c','d']
>>> T=(1,2,3)
>>> D={'a':'10'}
>>> dict(zip(L,map(str,T)),**D)
{'a': '10', 'c': '3', 'b': '2', 'f': '1'}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接