嵌套字典蟒蛇键

我想是以下结构:y['1'][tuple(list)] = val 作为一个Python嵌套字典,但同时,我努力,我得到KeyError:在csv文件嵌套字典蟒蛇

的数据是这样的:

Rest_id, rates, items 

1,4, burger

1,8, tofu_log

2,5, burger

2,8.5, tofu_log

3,4, chef_salad

3,8, steak_salad_sandwich

4,5, steak_salad_sandwich,salad

4,2.5, wine_spritzer

5,4, extreme_fajita3,test2,test4,test

5,8, fancy_european_water

6,5, fancy_european_water

6,6, extreme_fajita, jalapeno_poppers, extra_salsa

7,1.5, wine_spritzer

7,5, extreme_fajita, jalapeno_poppers

以下是代码:

y = defaultdict(dict) 

with open('sample_data_tested_with.csv','r') as f:

reader = csv.reader(f, delimiter=',', quoting=csv.QUOTE_NONE)

reader = [[x.strip() for x in row] for row in reader]

for i in reader:

#cd[i[0]] = {tuple(i[2:]):i[1]}

#cd[i[0]][tuple(i[2:])].update(i[1])

print i[0], i[1], tuple(i[2:])

y[i[0]][tuple(i[2:])].append(i[1])

后来我想在这样的y['rest_id']['item']字典搜索并找到该利率。 在此先感谢。

从IPython的完整的堆栈:

In [49]: with open('sample_data_tested_with.csv','r') as f: 

reader = csv.reader(f, delimiter=',', quoting=csv.QUOTE_NONE)

reader = [[x.strip() for x in row] for row in reader]

for i in reader:

#cd[i[0]] = {tuple(i[2:]):i[1]}

#cd[i[0]][tuple(i[2:])].update(i[1])

print i[0], i[1], tuple(i[2:])

#x[tuple(i[2:])]=float(i[1])

y[i[0]][tuple(i[2:])].append(i[1])

....:

1 4 ('burger',)

---------------------------------------------------------------------------

KeyError Traceback (most recent call last)

<ipython-input-49-ab608c2dc33a> in <module>()

7 print i[0], i[1], tuple(i[2:])

8 #x[tuple(i[2:])]=float(i[1])

----> 9 y[i[0]][tuple(i[2:])].append(i[1])

10

KeyError: ('burger',)

回答:

看起来你可以使用itertools.groupby

>>>import itertools 

>>>newreader,keys=[],[]

>>>for k,g in itertools.groupby(reader,key=lambda x:x[0]):

newreader.append(tuple(g[1:]))

keys.append(k)

这应该您的数据组到元组。 现在我们遍历newreader将每个元组转换为字典。

>>>d={} 

>>>for *i,j in newreader,keys:

d[j]=dict(i)

回答:

下面是我得到的解决方案,请检查并让我们知道是否有人发现任何问题,非常感谢。

def create_NestedDict(filename): 

NestedDict = defaultdict(dict)

with open(filename,'rb') as f:

reader = csv.reader(f, delimiter=',')

for row in reader:

#print "row :", row

record = row

if record[0] not in NestedDict:

NestedDict[record[0]] = {}

items = tuple([ i.strip() for i in record[2:]])

[record[0]][items] = record[1]

return NestedDict

以上是 嵌套字典蟒蛇键 的全部内容, 来源链接: utcz.com/qa/264451.html

回到顶部