我已经问过一个类似的问题(从字典中删除重复值而不删除键)但我认为我正在深入研究这个问题并且可以更好地解释它,因为不幸的是,没有一个答案符合我的需要,但他们确实回答了我的问题。
我正在从两个 .csv 文件构建一个 OrderedDict。第一个包含位置代码,而第二个是按时间排列的硬件重定位列表。所有位置代码都是唯一的,因此这是我的字典的关键,我有一个循环,使用该 .csv 文件构建具有空值的字典。然后我有另一个循环将硬件数据添加到正确的位置代码。一些硬件数据采用列表形式,因此不可散列。
我遇到的问题是,随着硬件移动到新位置,我需要将其从以前的位置移除。所以它只在代码末尾的一个地方
我的位置代码是;
>1, 2, 3, 4, 5, 6
我的硬件数据是按时间排序的,
>7pm, 1, 'item1', 'item2', 'item3'
>8pm, 2, 'item4', 'item5', 'item6'
>9pm, 3, 'item7', '', ''
>10pm, 4, 'item8', '', ''
>11pm, 5, 'item1', 'item2', 'item3'
>12am, 6, 'item7', '', ''
>1am, 3, 'item4', 'item5', 'item6'
如果我在没有任何条件语句的情况下在整个时间范围内运行代码,我的最终字典看起来像
>myDict = {'1': ['item1', 'item2', 'item3'], '2': ['item4', 'item5', 'item6'],
>'3': 'item7', '4': 'item8', '5': ['item1', 'item2', 'item3'], '6': 'item7'}
但我也需要它的样子;
>my Dict = {'1': '', '2':'', '3': ['item4', 'item5', 'item6'], '4':
>'item8', '5': ['item1', 'item2', 'item3'], '6': 'item7'}
因为项目(值)没有以与添加位置(键)相同的顺序添加到字典中,所以在构建字典(添加值)时这样做很重要,因为我无法返回并且只是完成后删除重复项。
我尝试了很多事情并得到了不同的结果,但我最新的是
locationCSV = open('location.csv', "r")
hardwareCSV = open('hardware.csv', "r")
locationLines = locationCSV.readlines()
hardwareLines = hardwareCSV.readlines()
finalLoc = OrderedDict()
for line in locationLines:
locationList = line.split(",")
code = locationList[0]
finalLoc[code] = ""
for line in hardwareLines:
hardwareList = line.split(",")
hardwareData = [hardwareList[2],hardwareList[3],hardwareList[4]]
for k, v in finalLoc.iteritems():
if hardwareData in finalLoc.itervalues():
finalLoc[k] = ""
finalLoc[hardwareList[1]] = hardwareData
print finalLoc
这会将所有位置返回为空。我已经坚持了几天,所以任何帮助将不胜感激。