Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.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_Postgresql - Fatal编程技术网

向python字典添加多个键值对,然后检查重复值

向python字典添加多个键值对,然后检查重复值,python,python-3.x,postgresql,Python,Python 3.x,Postgresql,我是python新手,正在阅读gzip文件中的一行代码- ('ABC',孟买',无,无,'123',无,无)xx 1191 ('ABC','孟买',无,无,'123',无,无)xx 1 1000 有这4个值,其中我必须检查是否已经存在第1个和第3个元素的组合。如果存在,我们必须对第四个元素求和,并将其插入Postgres DB 输出- ('ABC', 'MUMBAI', None, None, '123', None, None) xx 1 2191 当我在Postgres数据库中插入这些行

我是python新手,正在阅读gzip文件中的一行代码-

('ABC',孟买',无,无,'123',无,无)xx 1191
('ABC','孟买',无,无,'123',无,无)xx 1 1000
有这4个值,其中我必须检查是否已经存在第1个和第3个元素的组合。如果存在,我们必须对第四个元素求和,并将其插入Postgres DB

输出-

('ABC', 'MUMBAI', None, None, '123', None, None) xx 1 2191
当我在Postgres数据库中插入这些行时,该数据库对第一个属性、第二个属性、第三个属性和日期具有唯一约束。我得到“重复键值违反唯一约束”


我试着创建一个字典,如果发现重复的记录,就更新它,但我无法通过。我不想添加另一个循环并遍历整个gzip文件。是否有任何优化的解决方案?

考虑到
记录了您的数据的一部分,例如

记录=[
((‘ABC’、‘孟买’、无、无、‘123’、无、无)、xx、1191),
((‘ABC’、‘孟买’、‘无’、‘123’、‘无’、‘无’)、xx、11000),
...
]
你的问题可以这样解决

导入集合
总和=集合。默认dict(int)
记录中的记录:
key=(记录[0],记录[2])#第一个和第三个元素的组合
和[键]+=记录[3]

我从@michaeldel的答案中找到了一条线索,然后找到了解决办法-

sql_query_template = "INSERT INTO product_data.data VALUES ( (%s) , (%s) , %s , '%s' , %d );"
master_dict = collections.defaultdict(int)
imported_dict = collections.defaultdict(int)
for line in self.gziplines(`enter code here`filename):
    line=line.replace("\0", " ")
    product, category, attribute, value = self.split_line(line)
    key = (product, attribute)
    if key not in master_dict:
        master_dict[key] = value
    else:
        master_dict[key] += value
for line in self.gziplines(filename):
    line=line.replace("\0", " ")
    if product[0] != None and key not in imported_dict:
       sql_query = sql_query_template % (category, product, attribute, date, master_dict.get(key))
       cur.execute(sql_query)
       imported_dict[key] = master_dict.get(key)

谢谢你的回答。它有帮助,但它返回一个int字典-defaultdict(,{('ABC',MUMBAI',None,None,None,'123',None,None,None),1):1191}),而我需要遍历zip中的行(对于self.gziplines(filename))中的行,我需要行而不是字典。只需迭代该字典并打印项目即可获得所需的输出