У меня есть файл csv, который содержит данные торговли для некоторых стран. Данные имеют формат следующим образом:Пересечения между значениями в двух словарях в python
rep par commodity value
USA GER 1 700
USA GER 2 100
USA GER 3 400
USA GER 5 100
USA GER 80 900
GER USA 2 300
GER USA 4 500
GER USA 5 700
GER USA 97 450
GER UK 50 300
UK USA 4 1100
UK USA 80 200
UK GER 50 200
UK GER 39 650
Я намерен создать новый словарь и с помощью созданного словаря, рассчитать общую стоимость обыкновенных торгуемых товаров между странами. Например, рассмотрите вопрос о торговле между США-ГЭР, я намерен проверить, находится ли GER-USA в данных, и если она существует, значения для общих товаров суммируются и делают то же самое для всех стран. Словарь должен быть как:
Dic_c1c2_producs=
{('USA','GER'): ('1','700'),('2','100'),('3','400'),('5','100'),('80','900');
('GER','USA'):('2','300'),('4','500'),('5','700'),('97','450') ;
('GER','UK'):('50','300');
('UK','USA'): ('4','80'),('80','200');
('UK','GER'): ('50','200'),('39','650')}
Как вы можете видеть, США-GER и GER-США имеют товары 2 и 5 общих и стоимость этих товаров являются (100 + 300) + (100 + 700) , Для пар USA-UK и UK-USA у нас есть общие товары: 0, поэтому общая сумма торговли будет равна 0. Для GER-UK и UK-GER товар 50 является общим, а общая торговля составляет 300 + 200. В конце концов, я хочу, чтобы иметь что-то вроде:
Dic_c1c2_summation={('USA','GER'):1200;('GER','UK'):500; ('UK','USA'):0}
Любая помощь будет оценена.
В дополнение к моему посту, я написал следующие строки:
from collections import defaultdict
rfile = csv.reader(open("filepath",'r'))
rfile.next()
dic_c1c2_products = defaultdict(set)
dic_c_products = {}
country = set()
for row in rfile :
c1 = row[0]
c2 = row[1]
p = row[2]
country.add(c1)
for i in country :
dic_c_products[i] = set()
rfile = csv.reader(open("filepath"))
rfile.next()
for i in rfile:
c1 = i[0]
c2 = i[1]
p = i[2]
v=i[3]
dic_c_products[c1].add((p,v))
if not dic_c1c2_products.has_key((c1,c2)) :
dic_c1c2_products[(c1,c2)] = set()
dic_c1c2_products[(c1,c2)].add((p,v))
else:
dic_c1c2_products[(c1,c2)].add((p,v))
c_list = dic_c_products.keys()
dic_c1c2_productsummation = set()
for i in dic_c1c2_products.keys():
if dic_c1c2_products.has_key((i[1],i[0])):
for p1, v1 in dic_c1c2_products[(i[0],i[1])]:
for p2, v2 in dic_c1c2_products[(i[1],i[0])]:
if p1==p2:
summation=v1+v2
if i not in dic_c1c2_productsum.keys():
dic_c1c2_productsum[(i[0],i[1])]=(p1, summation)
else:
dic_c1c2_productsum[(i[0],i[1])].add((p1, summation))
else:
dic_c1c2_productsn[i] = " "
вы пытались что-нибудь до сих пор? – user1269942
@ user1269942 Я разместил свой код. Это не работает, хотя – homayoun