【发布时间】:2015-09-03 11:30:36
【问题描述】:
我已经在寻找解决问题的方法,但没有成功。我的问题的部分解决方案是here,但这并不能解决所有问题。
我有两个这样的字典列表 - 每个字典都写入一个 csv 文件,但我将内容读取到以下变量:
list1 = [{a:1, b:2, c:3}, {a:4, b:5, c:6}, {a:7, b:8, c:9}]
list2 = [{b:2, a:1, c:3}, {c:6, b:5, a:4}, {b:8, a:7, c:9}]
使用上面链接的解决方案,即:
>>> import itertools
>>> a = [{'a': '1'}, {'c': '2'}]
>>> b = [{'a': '1'}, {'b': '2'}]
>>> intersec = [item for item in a if item in b]
>>> sym_diff = [item for item in itertools.chain(a,b) if item not in intersec]
我没有找到匹配项,因为字典的顺序不同。但实际上,这两个列表是相同的。我怎样才能检查这个?在将字典写入 csv 文件之前,我是否必须对它们进行排序?这可以解决吗?
这是我目前的主要问题,但我还有另一个问题。如果能够进行匹配检查但忽略我定义的一个或多个键,那就太好了。这也可以吗?
编辑:我在 csv 文件中有字典,我正在使用以下代码阅读它们:
def read_csv_file(self, filename):
'''Read CSV file and return its content as a Python list.'''
f = open(filename, 'r')
csvfile = csv.reader(f)
f.close
return [row for row in csvfile]
这非常重要,因为我认为问题在于从 csv 读取值后它不再是字典,因此顺序必须相同。
EDIT2:csv 文件的示例(3 行,它正在创建一个空行,但这不是问题...)
"{u'Deletion': '0', u'Source': 'Not Applicable', u'Status': ''}"
"{u'Deletion': '0', u'Source': 'Not Applicable', u'Status': ''}"
【问题讨论】:
-
你能发布一个你的 csv 文件的例子,看看它是如何格式化的吗?
-
如果您正在读取此 CSV 文件中的每一行,那么
list2的用途是什么? -
我正在读取两个不同的 csv,然后比较它们。
-
所以如果我理解得很好,你是从两个 csv 文件中读取并将字典存储在列表中,那么你想得到两个列表之间的差异和交集,对吧?
-
使用
csv.reader()从您的csv文件中读取将返回给您一个字符串列表,而不是字典......!
标签: python list csv dictionary