【发布时间】:2018-03-12 17:44:08
【问题描述】:
我必须从同一个 csv 文件中编写三个字典。输入文件是
col1 col2 value
item1 a value1
item1 b value2
item1 c value3
item2 a value4
item2 c value5
...
我需要这三个字典:
1.
dict1
item1:set(a,b,c)
item2:set(a,c)
...
2.
dict2
set(item1,a):value1
set(item1,b):value2
set(item1,c):value3
set(item2,a):value4
set(item2,c):value5
我需要在第一个字典中使用集合作为值,因为那样我将不得不在值之间执行交集,我认为集合是更合适的类型。
我的最终字典,由这些交叉点产生,将类似于:
3.
dict3
(item1,item2):value1+value3
看例子可能更容易理解,但让我解释一下:基本上dict3考虑dict1的值之间的成对交集,在我的例子中只有a,然后是dict2.get((item1,a))+dict2.get((item2,a))并将其作为值分配给这对夫妇(item1,item2)。如果 item1 和 item2 有共同的另一个元素,比如d,那么(item1,item2) 的值将是dict2.get((item1,a))+dict2.get((item2,a))+dict2.get((item1,d))+dict2.get((item2,d))。请注意,在真实数据集中 col1 和 col2 项目是字符串。
重复此计算,检查 dict1 中值的每个成对交集。
获取这些词典最简单的方法是什么?我更喜欢使用 pandas,所以我希望您建议使用数据框的解决方案,但我也可以接受直接从外部文件读取的任何内容,因为这仅在第一阶段发挥作用。
编辑我可能应该更好地澄清我需要一个 pairwise 交集,而我给出的示例不会出现这个问题。为了有一个更好的例子,可以尝试:
df=pd.DataFrame(columns=['col1','col2','value'])
df.col1=['item1','item1','item1','item2','item2','item3','item3']
df.col2=['a','b','c','a','d','a','c']
df.value=[1,2,3,4,5,6,7]
并尝试得到结果:
dict3
(item1,item2):5
(item1,item3):17
(item2,item3):10
这似乎是一个非常复杂的问题:我在成对集合交集here 上找到了一些东西,但我找不到最终解决方案。
【问题讨论】:
标签: python python-3.x pandas dictionary