我有一个2列选项卡分隔的输入,我想在python中填充一个字典。第一列与键关联(有重复项),第二列与值关联。
样本输入:
cat tail
cat whisker
cat meow
cat black
dog tail
dog paw
dog bark
bird beak我编写了以下代码,它生成一个(尽管是错误的)输出,其中包含我要查找的字典格式,它将one键从col1与其col2中的所有值关联起来。
我一直使用的代码是:
#!/usr/bin/python
# -*- coding: utf-8 -*-
keys = []
values = []
with open('animal-trial', "rU") as f:
for line in f:
line = line.split()
keys.append(line[0])
values.append(line[1])
d = {}
for k,v in zip(keys, values):
d.setdefault(k, []).append(v)
print d我查阅了其他参考资料 [HERE]、[HERE]和[HERE],但是,所有的建议,包括defaultdicts,都将我带到相同的输出,而不是期望的输出。
的实际输出是:
{'cat': ['tail']}
{'cat': ['tail', 'whisker']}
{'cat': ['tail', 'whisker', 'meow']}
{'cat': ['tail', 'whisker', 'meow', 'black']}
{'dog': ['tail'], 'cat': ['tail', 'whisker', 'meow', 'black']}
{'dog': ['tail', 'paw'], 'cat': ['tail', 'whisker', 'meow', 'black']}
{'dog': ['tail', 'paw', 'bark'], 'cat': ['tail', 'whisker', 'meow', 'black']}
{'bird': ['beak'], 'dog': ['tail', 'paw', 'bark'], 'cat': ['tail', 'whisker', 'meow', 'black']}所需的输出是
{'bird': ['beak'], 'dog': ['tail', 'paw', 'bark'], 'cat': ['tail', 'whisker', 'meow', 'black']} 有人能告诉我我在哪里出错,或者有一个更全面的解决方案,最终结果是one字典吗?
发布于 2017-01-27 15:14:28
您可以检查该键是否存在,如果它是存在的,则追加,如果没有,则创建一个包含单个元素的列表:
d = {}
with open('a12', 'r') as f:
for line in f:
if line.strip():
a = line.split()
if a[0] not in d:
d[a[0]] = [a[1]]
else:
d[a[0]].append(a[1])
print d输出:
{'cat': ['tail', 'whisker', 'meow', 'black'], 'bird': ['beak'], 'dog': ['tail', 'paw', 'bark']}熊猫:
import pandas as pd
df = pd.read_csv('file_name', header=None, sep='\s+')
print df.groupby(0)[1].apply(list).to_dict()输出:
{'dog': ['tail', 'paw', 'bark'], 'bird': ['beak'], 'cat': ['tail', 'whisker', 'meow', 'black']}发布于 2017-01-27 15:17:50
我假设您有一个名为f_input.txt的输入文件。
您还可以从groupby模块中使用itertools,如下例所示:
from itertools import groupby
data = list(k.rstrip().split() for k in open("f_input.txt", 'r'))
final = {}
for k, v in groupby(data, lambda x : x[0]):
final[k] = list(k[1] for k in list(v))
print(final)输出:
{'bird': ['beak'], 'dog': ['tail', 'paw', 'bark'], 'cat': ['tail', 'whisker', 'meow', 'black']}发布于 2017-01-27 15:24:35
假设您在"\n“上拆分了您的输入
d = {}
tab = ['cat tail', 'cat whisker', 'cat meow', 'cat black', 'dog tail', 'dog paw', 'dog bark', 'bird beak']
for i in tab:
try:
d[i.split(" ")[0]] += [i.split(" ")[1]]
except KeyError:
d[i.split(" ")[0]] = [i.split(" ")[1]]输出
{‘鸟’:‘喙’,‘狗’:‘尾巴’,‘爪子’,‘吠’,‘猫’,‘尾巴’,‘胡须’,‘喵’,‘黑’}
https://stackoverflow.com/questions/41897111
复制相似问题