在python中使用重复键字典
我有以下列表,其中包含具有不同值的重复的汽车登记号码。 我想把它转换成一个字典,接受这个汽车登记号码的多个键。 到目前为止,当我尝试将列表转换为字典时,它消除了其中一个键。 有人可以告诉我如何使用重复的键字典列表是:
EDF768, Bill Meyer, 2456, Vet_Parking TY5678, Jane Miller, 8987, AgHort_Parking GEF123, Jill Black, 3456, Creche_Parking ABC234, Fred Greenside, 2345, AgHort_Parking GH7682, Clara Hill, 7689, AgHort_Parking JU9807, Jacky Blair, 7867, Vet_Parking KLOI98, Martha Miller, 4563, Vet_Parking ADF645, Cloe Freckle, 6789, Vet_Parking DF7800, Jacko Frizzle, 4532, Creche_Parking WER546, Olga Grey, 9898, Creche_Parking HUY768, Wilbur Matty, 8912, Creche_Parking EDF768, Jenny Meyer, 9987, Vet_Parking TY5678, Jo King, 8987, AgHort_Parking JU9807, Mike Green, 3212, Vet_Parking
我试过的代码是:
data_dict = {} data_list = [] def createDictionaryModified(filename): path = "C:\Users\user\Desktop" basename = "ParkingData_Part3.txt" filename = path + "//" + basename file = open(filename) contents = file.read() print contents,"\n" data_list = [lines.split(",") for lines in contents.split("\n")] for line in data_list: regNumber = line[0] name = line[1] phoneExtn = line[2] carpark = line[3].strip() details = (name,phoneExtn,carpark) data_dict[regNumber] = details print data_dict,"\n" print data_dict.items(),"\n" print data_dict.values()
Python字典不支持重复键。 一种方法是在字典中存储列表或集合。
一个简单的方法来实现这是通过使用defaultdict
:
from collections import defaultdict data_dict = defaultdict(list)
所有你需要做的是replace
data_dict[regNumber] = details
同
data_dict[regNumber].append(details)
你会得到一个列表字典。
你可以改变python内置types的行为。 对于你的情况,真的很容易创build字典的子类,将自动存储在同一个键下的列表中重复的值:
class Dictlist(dict): def __setitem__(self, key, value): try: self[key] except KeyError: super(Dictlist, self).__setitem__(key, []) self[key].append(value)
输出例子:
>>> d = dictlist.Dictlist() >>> d['test'] = 1 >>> d['test'] = 2 >>> d['test'] = 3 >>> d {'test': [1, 2, 3]} >>> d['other'] = 100 >>> d {'test': [1, 2, 3], 'other': [100]}
你不能有一个与定义重复键的字典! Insted,你可以使用一个单一的键,作为值,有一个关键的元素列表。
所以你可以按照以下步骤操作:
- 看看当前元素(你的初始设置)键是否是最后一个字典。 如果是,请转到步骤3
- 用键更新字典
- 附加到字典[键]列出新的值
- 重复[1-3]
字典中不能有重复的键。 怎么样的列表字典?
for line in data_list: regNumber = line[0] name = line[1] phoneExtn = line[2] carpark = line[3].strip() details = (name,phoneExtn,carpark) if not data_dict.has_key(regNumber): data_dict[regNumber] = [details] else: data_dict[regNumber].append(details)