Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/302.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 - Fatal编程技术网

Python 是否附加到字典中的列表而不替换旧值?

Python 是否附加到字典中的列表而不替换旧值?,python,Python,因此,我有以下格式的列表: [2.7, 2018, Canada] [3.4, 2018, New York, USA] [17.49, 2017, Canada] {Canada: [2018, 2.7, 2017, 17.49], USA: [2018, 3.4]} 这种模式持续了一段时间,各国都在重复 我想把它的格式: [2.7, 2018, Canada] [3.4, 2018, New York, USA] [17.49, 2017, Canada] {Canada: [2018

因此,我有以下格式的列表:

[2.7, 2018, Canada]
[3.4, 2018, New York, USA]
[17.49, 2017, Canada]
{Canada: [2018, 2.7, 2017, 17.49], USA: [2018, 3.4]}
这种模式持续了一段时间,各国都在重复

我想把它的格式:

[2.7, 2018, Canada]
[3.4, 2018, New York, USA]
[17.49, 2017, Canada]
{Canada: [2018, 2.7, 2017, 17.49], USA: [2018, 3.4]}
这是我的密码 (数据列表=上述列表)

然而,append函数并不像我想要的那样工作。它将覆盖上一个列表中的信息。给我一个输出,比如:

{Canada: [2018, 17.49], USA: [2018, 3.4]}
如何将其添加到分配给密钥的列表中,而不是替换它

编辑:想澄清一下,我的数据是从一个文本文件中以这种格式导入的,带有新行间距

A = [[2.7, 2018, "Canada"], [3.4, 2018, "New York", "USA"], [17.49, 2017, "Canada"]]

d = {}
for i in A:
    if i[-1] not in d: #Check if key already in dict
        d[i[-1]] = []
    d[i[-1]] += i[:len(i)-1]   #Exclude last element

print d
结果:

{'Canada': [2.7, 2018, 17.49, 2017], 'USA': [3.4, 2018, 'New York']}
结果:

{'Canada': [2.7, 2018, 17.49, 2017], 'USA': [3.4, 2018, 'New York']}

您可以使用
collections.defaultdict

from collections import defaultdict
data = [[2.7, 2018, "Canada"], [3.4, 2018, "New York", "USA"], [17.49, 2017, "Canada"]]
d = defaultdict(list)
for sublist in data:
    d[sublist[-1]] += sublist[0:2]
输出

>>> d
defaultdict(<class 'list'>, {'USA': [3.4, 2018], 'Canada': [2.7, 2018, 17.49, 2017]})
>>d
defaultdict(,{'USA':[3.4,2018],'Canada':[2.7,2018,17.49,2017]})

您可以使用
集合。defaultdict

from collections import defaultdict
data = [[2.7, 2018, "Canada"], [3.4, 2018, "New York", "USA"], [17.49, 2017, "Canada"]]
d = defaultdict(list)
for sublist in data:
    d[sublist[-1]] += sublist[0:2]
输出

>>> d
defaultdict(<class 'list'>, {'USA': [3.4, 2018], 'Canada': [2.7, 2018, 17.49, 2017]})
>>d
defaultdict(,{'USA':[3.4,2018],'Canada':[2.7,2018,17.49,2017]})
您可以使用根据公用键对列表进行分组,然后将dict建立为您的预期输出

>>> import itertools
>>> data = [[2.7, 2018, "Canada"], [3.4, 2018, "New York", "USA"], [17.49, 2017, "Canada"]]
>>> d = dict((k,list(g))for k,g in itertools.groupby(sorted(data,key=lambda x: x[-1]),key=lambda x: x[-1]))
此操作将基于公用键对列表进行分组。我们已将键指定为列表的最后一个元素

>>> d
>>> {'Canada': [[2.7, 2018, 'Canada'], [17.49, 2017, 'Canada']], 'New York': [[3.4, 2018, 'New York', 'USA']]}

>>> final_dict = dict((k,list(filter(lambda x: x!=k, list(itertools.chain(*v))))) for k,v in d.items())
这将为您提供所需的输出

>>> final_dict
>>> {'Canada': [2.7, 2018, 17.49, 2017], 'New York': [3.4, 2018, 'USA']}
您可以使用基于公用键对列表进行分组,然后将dict构建为您的预期输出

>>> import itertools
>>> data = [[2.7, 2018, "Canada"], [3.4, 2018, "New York", "USA"], [17.49, 2017, "Canada"]]
>>> d = dict((k,list(g))for k,g in itertools.groupby(sorted(data,key=lambda x: x[-1]),key=lambda x: x[-1]))
此操作将基于公用键对列表进行分组。我们已将键指定为列表的最后一个元素

>>> d
>>> {'Canada': [[2.7, 2018, 'Canada'], [17.49, 2017, 'Canada']], 'New York': [[3.4, 2018, 'New York', 'USA']]}

>>> final_dict = dict((k,list(filter(lambda x: x!=k, list(itertools.chain(*v))))) for k,v in d.items())
这将为您提供所需的输出

>>> final_dict
>>> {'Canada': [2.7, 2018, 17.49, 2017], 'New York': [3.4, 2018, 'USA']}

您的
数据列表=[[2018年2月7日,加拿大],[2018年3月4日,美国纽约],[2017年17月49日,加拿大]]
?导致您的初始化
空\u dic[数据列表[-1]]=[]
实际上不正确您的
数据列表=[[2018年2月7日,加拿大],[2018年3月4日,美国纽约],[2017年17月49日,加拿大]
?因为您的初始化
empty\u dic[data\u lists[-1]]=[]
实际上不正确。我该如何设置多行数据的格式,从帖子中的格式到您评论中的格式?@bruhsmh您从哪里获得的原始格式的数据?如前所述,它不是有效的Python语法。你是从这样的文件中读到的吗?是的,我是从一个文本文件中读到的,但是我所要做的就是创建一个空列表并附加它来修复它!此外,使用此方法还可以切换值的顺序。那么[2018,2.7]而不是[2.7,2018]?是的,在这种情况下,切换值
d[sublist[-1]+=sublist[1::-1]
我将如何将我的多行数据的格式从文章中的格式转换为您评论中的格式?@bruhsmh您从哪里获得的原始格式的数据?如前所述,它不是有效的Python语法。你是从这样的文件中读到的吗?是的,我是从一个文本文件中读到的,但是我所要做的就是创建一个空列表并附加它来修复它!此外,使用此方法还可以切换值的顺序。因此[2018,2.7]而不是[2.7,2018]?是的,在这种情况下切换值
d[sublist[-1]+=sublist[1::-1]