2011-11-09 287 views
1

如何創建在python 嵌套的字典所以,我希望數據是這種形式..嵌套字典蟒蛇

{Category_id: {Product_id:... productInstance},{prod_id_1: this instance}} 

基本上,如果我做這樣的事情 可以說,我要檢查是否在

product_id = 5 is in category 1. 

所以,如果我做

Dict[1].has_key(5)--> be true or false.. 

我的壞代碼是

fin = readFile(db) 
categoryDict = defaultdict(list) 
itemDict ={} 
for line in fin: 
    itemInstance = setItemInstances(line) 

    itemDict[itemInstance._product_id] = itemInstance 
    categoryDict[itemInstance._category_id].append(itemDict) 




EDIT: example 
dict = {1: { p_id: p_instance_1, 
      p_id_2: p_ins_2} 
    2:{ p_in_this_cat_id: this isntance}} 

感謝

+1

你想要'{Category_id:{Product_id:... productInstance} {prod_id_1:這個實例}}'(在Category_id'後面加冒號)嗎? – user

+0

哦是啊..對不起,我的壞..我將編輯描述.. – Fraz

+0

請給我們看一個你想要字典看起來像一個_valid Python example_。你的意思是:{1:{2:productInstance,3:productInstance2,...},4:{...}}其中1和4是類別ID,2和3是產品ID? – agf

回答

7

我覺得這是更接近你想要的東西:

fin = readFile(db) 
categoryDict = defaultdict(dict)  # automatically create a subdict 
for line in fin: 
    itemDict = {}     # a new innermost dict for every item 
    itemInstance = setItemInstances(line) 
    itemDict[itemInstance._product_id] = itemInstance 
    categoryDict[itemInstance._category_id] = itemDict 
+0

yepp。 :) 謝謝 – Fraz

1

日文N3 N4 N5在Python基本上總是一個「項目」,「收藏」;每個「項目」是一個鍵和一個值,用冒號分隔,每個項目用逗號分隔。一個項目不能有多個鍵或值,但可以將集合作爲鍵或值。

看你的第二個例子:

dict = {1: { p_id: p_instance_1, 
      p_id_2: p_ins_2} 
    2:{ p_in_this_cat_id: this isntance}} 

外字典需要另一個逗號,第一項的結束之間(與關鍵1)和第二(與關鍵2)。

此外,它不是很清楚this instance是什麼意思,但通常情況下,對象上的方法將對象本身作爲第一個參數傳遞,並按照慣例稱爲self,但可以給出任何名稱(並且有時這樣做是爲了減少混淆,例如用元類)

最後;裸詞,p_id等等,除非它們是變量名稱(分配給較早的)或另一個對象的屬性(可能爲self.p_id),否則它們很少有效。我不知道這是你遇到的問題。

1

檢查我NestedDict類在這裏:https://stackoverflow.com/a/16296144/2334951

>>> branches = [b for b in data.paths()] 
>>> ['plumbers' in k for k in branches] 
[True, False, True, False, False, False] 
>>> any(['plumbers' in k for k in branches]) 
True 
>>> [k for k in branches if 'plumbers' in k] 
[['new york', 'queens county', 'plumbers'], ['new jersey', 'mercer county', 'plumbers']] 
>>> [data[k] for k in branches if 'plumbers' in k] 
[9, 3] 

我希望有一些直覺這個例子涉及的問題。