通過 python 方法在其他語言中完成了數百萬次,因為這讓我無法理解。
基本上是從資料庫中讀取一些資料。包括 ID、水果、顏色、名稱等資料
我需要在名稱上創建一個物件/字典鍵。然后名稱包含水果和顏色的串列/字典。
{"greenhouse1": {"fruits": {"apples", "oranges"}
{"colors": {"red","orange"}}
我逐行遍歷資料庫,名稱鍵將出現多次。當它執行時,水果或顏色可能已經填充并需要附加。
namedict = {}
db_rows = execute_query(cursor, args.store_proc)
for row in db_rows:
db_name = row.id
db_fruit = row.fruit
db_color = row.color
if db_name in namedict:
namedict[db_name]["fruits"].append(db_fruit)
namedict[db_name]["color"].append(db_color)
else:
namedict[db_name]["fruits"] = [db_fruit]
namedict[db_name]["color"] = [db_color]
uj5u.com熱心網友回復:
collections.defaultdict是你的朋友:如果你訪問一個 defaultdict 的新鍵,它會自動使用提供的函式初始化(list或者set在這種情況下)。因為你想要一個包含串列作為值(分開的水果和顏色)的字典(“fruits”、“colors”)的字典(例如“greenhouse1”),所以我們需要一個嵌套的 defaultdict。以下應該有效:
from collections import defaultdict
db = defaultdict(lambda: defaultdict(list)) # alternative: set instead of list
db['greenhouse1']['fruits'].append('apples') # use `add` for sets
db['greenhouse1']['fruits'].append('oranges')
db['greenhouse1']['colors'] = ["red", "orange"]
db['greenhouse2']['fruits'].append('banana')
print(db)
# defaultdict(<function __main__.<lambda>()>,
# {'greenhouse1': defaultdict(list,
# {'fruits': ['apples', 'oranges'],
# 'colors': ['red', 'orange']}),
# 'greenhouse2': defaultdict(list, {'fruits': ['banana']})})
Adefaultdict像普通的 dict 一樣作業,所以不要與奇怪的輸出混淆。例如,要訪問溫室 1 的果實,您可以簡單地撰寫db['greenhouse1']['fruits']并回傳一個串列(或集合)。
uj5u.com熱心網友回復:
首先,您需要在字典鍵周圍fruits和中使用引號。color
其次,在創建字典之前,您無法創建嵌套字典元素。
您可以使用collections.defaultdict. 由于您需要嵌套字典,因此需要嵌套默認字典。
from collections import defaultdict
namedict = defaultdict(lambda: defaultdict(set))
for row in db_rows:
namedict[row.id]['fruits'].add(row.fruit)
namedict[row.id]['colors'].add(row.color)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/488118.html
下一篇:回傳函式的字典
