我有一个有值的文件
key1:value1
key2:value2
key1:value3
key2:value4
我想将密钥和值提取到字典d中,将重复的密钥和值提取到另一个字典中
像
d={'key1':value1,'key2':value2}
和e ={'key1':value3,'key2':value4}
这是我的代码,需要进行哪些修改?如果需要两个以上的词典,可以做些什么?
d={}
e={}
L=[]
with open('file1.txt', 'r') as searchfile:
for line in searchfile:
line = line.strip()
words=line.split(':')
if words[0] in line:
d[words[0]]=(words[1]
)
L.append(d)
print L
答案 0 :(得分:1)
d={}
dict_lst = [d]
with open('file1.txt', 'r') as searchfile:
for line in searchfile:
line = line.strip()
words=line.split(':')
for d in dict_lst:
if not d.has_key(words[0]):
d[words[0]] = words[1]
break
else:
new_d = {}
new_d[words[0]] = words[1]
dict_lst.append(new_d)
答案 1 :(得分:0)
以下内容适用于任意数量的源文件,例如: input.txt
和input2.txt
。
它还会保留重复项的计数,以防万一有多个副本,这意味着如果所有文件中有三个条目具有相同的密钥,则会显示该密钥的两个重复项:
import collections
d = {}
duplicates = {}
duplicate_counts = collections.Counter()
for input_file in ['input.txt', 'input2.txt']:
with open(input_file, 'r') as f_input:
for key_value in f_input:
key, value = key_value.strip().split(':')
if key in d:
duplicates[key] = value
duplicate_counts[key] += 1
else:
d[key] = value
print 'd:', d
print 'duplicates:', duplicates
print 'duplicate counts:', duplicate_counts
答案 2 :(得分:0)
这适用于任意数量的词典,并使用for-else语法。
在第一个套件中执行的break语句终止循环 不执行else子句的套件。
dicts = [{}]
with open('file.txt', 'r') as f:
for line in f:
key, value = line.strip().split(':')
for d in dicts:
if key not in d:
d[key] = value
break
else:
dicts.append({})
dicts[-1][key] = value
print dicts
给定输入文件:
key1:value1
key2:value2
key1:value3
key2:value4
key1:value5
key3:value6
输出是:
[{'key3': 'value6', 'key2': 'value2', 'key1': 'value1'},
{'key2': 'value4', 'key1': 'value3'},
{'key1': 'value5'}]
请记住,词典是无序的,所以' key3'在第一个词典中处于第一位置并不意味着什么(并且这些位置将随着PYTHONHASHSEED
的不同而变化。