Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将两个列表压缩为字典时出现问题?_Python_Python 3.x_List_Data Structures - Fatal编程技术网

Python 将两个列表压缩为字典时出现问题?

Python 将两个列表压缩为字典时出现问题?,python,python-3.x,list,data-structures,Python,Python 3.x,List,Data Structures,我有以下清单: a = ['A', 'B', 'C', 'C'] b = ['2', '3', 2, 3] 为了得到一份口述,我按如下方式将其压缩: a_dict = dict(zip(a,b)) 但是,由于最后一个对象是dict,因此我不能有重复的键: {'A': '2', 'B': '3', 'C': 3} 为了得到这样的东西,我可以有哪些选择?(*): 我尝试将所有内容转换为元组,但我使用pop替换字典中的一些键和值: data['A'] = data.pop('B') 因此,我

我有以下清单:

a = ['A', 'B', 'C', 'C']

b = ['2', '3', 2, 3]
为了得到一份口述,我按如下方式将其压缩:

a_dict = dict(zip(a,b))
但是,由于最后一个对象是dict,因此我不能有重复的键:

{'A': '2', 'B': '3', 'C': 3}
为了得到这样的东西,我可以有哪些选择?(*):

我尝试将所有内容转换为元组,但我使用pop替换字典中的一些键和值:

data['A'] = data.pop('B')

因此,我不能使用元组格式。因此,考虑到上述两个列表,如何获得(*)?

解决关键冲突的最常见方法是,在保持dict快速索引的大部分好处的同时,将值转换为列表:

d = {}
for k, v in zip(a, b):
    d.setdefault(k, []).append(v)
使
d
变成:

{'A': ['2'], 'B': ['3'], 'C': [2, 3]}
{('B', '3'), ('C', 3), ('A', '2'), ('C', 2)}

集合的
defaultdict

from collections import defaultdict
d=defaultdict(list)
for k,v in zip(a,b):
   d[k].append(v)
现在:

print(dict(d))
输出:

{'A': ['2'], 'B': ['3'], 'C': [2, 3]}
{'A': '2', 'B': '3', 'C': [2, 3]}
如果您关心单个元素列表:

print({k:(v if len(v)-1 else v[0]) for k,v in d.items()})
输出:

{'A': ['2'], 'B': ['3'], 'C': [2, 3]}
{'A': '2', 'B': '3', 'C': [2, 3]}

使用dicts无法实现所需的输出。您可以通过使用@blhsing的答案来解决名称冲突,或者使用集合来接近您想要的结果,因为我怀疑您想要检查数据结构中已经存在的组合,因为您尝试使用元组

c = set(zip(a, b))
所以
c
变成:

{'A': ['2'], 'B': ['3'], 'C': [2, 3]}
{('B', '3'), ('C', 3), ('A', '2'), ('C', 2)}

您可能需要不同的数据结构,因为dict不能有重复的密钥。听起来你好像有一个朋友。你在这里的最终目标是什么?你期望在你提议的对象中有什么结果?
{code>{A':'2',B':'3','C':2',C':3}一个键将指向一个dict中的一个值你可以得到类似于
{A':'2',B':'3','C':[2,3]}
字典不能包含重复的键,那你想要什么?你没有回答我的问题。如果您有
result=what you want
,并且您尝试检索
'C'
,类似于通常dict中的
result['C']
,您希望得到什么?