【发布时间】:2019-10-03 18:17:53
【问题描述】:
我有一个 csv 文件,其中包含
a,b
2,3
4,5
4,7
4,7
(其中 a,b 是列值)
下面我有两个函数,第一个函数将读取 csv 并将'a'作为键和'b'作为字典中的值
第二个函数我将'a'值作为参数传递,当我使用该函数时它返回b作为值。如果'a'没有值,我得到None。
def x (id):
dict1= {}
with open(file, 'r', encoding='utf') as f:
for i in csv.DictReader(f, skipinitialspace= True)
dict1[i['a']] = row['b']
print('im happy now' )
def getx (a):
return dict1.get(a, None)
完美运行。
现在我有一个包含四列值的 csv 文件
a,b,c,d
1,2,r,4
2,g,4,6
3,d,4,6
为此,我编写了类似的代码
def x ():
dict1= {}
with open(file, 'r', encoding='utf') as f:
for i in csv.DictReader(f, skipinitialspace= True)
dict1[i['a']] = dict(dict1[i['b']] = dict(dict1[i['c']] = row['d']))
print('im happy now' )
def getx (a):
return dict1.get(dict1['a']['b']['c'], None)
我的逻辑是展示
dict1[i['a']] = dict(dict1[i['b']] = dict(dict1[i['c']] = row['d']))
作为
dict1 :{
'a':{
'b':{
'c':2,
'c':4,
'c':4
}
}
}
我不确定我上面写的是否正确。
当我传递 dict1[a[]b][c] 时,我需要将 'd' 作为值返回。它返回空值。
期望值是 a,b,c 的组合,我需要一个值作为 d。
例如:从上面的 csv.. 对于 1,2,r 的组合,我需要返回 4 作为输出
更新:
我意识到“a”列具有重复值,并且无法在跳过重复键记录的字典键中处理。
from collections import defaultdict
dict_1 = defaultdict(list)
with open('file.txt','r') as f:
for r in f.readline():
i= r['a']
j= r['b']
k= r['c']
l =r['d']
details = [j,k,l]
dict_1[i].append((details))
print(dict_1)
这给了我
{'1' :[('k', '3', '5'),('e','3','2')], '4' :[('r','3','2'),('e','2','1')],....................}
如果我在上面的第一个函数中有 dict_1。 现在,任何建议,例如如何通过在我的第二个函数中传递 a、b、c 作为参数来获取 'd' 的值,否则 NONE?
【问题讨论】:
-
字典不能针对单个键有多个值。尝试将这些值存储在列表中(针对键)
-
对于 a、b、c 列,我需要 d 列作为值。因此,如果在列表中,我该如何管理所有内容..
-
我选择了字典,这样对于 a、b、c 组合我可以获得 d 值....如果在列表中,我不确定我们如何实现。 @rdas
-
您上面显示的示例是不可能的。但不能这样存储:
'c': [2, 4, 4] -
@rdas 。我看到我的“a”列中有重复项,作为字典,它不接受重复的键值。我错过了其中的许多记录。我们可以用 List 实现吗?
标签: python django python-3.x dictionary