在python3中创建嵌套字典

2024-10-01 09:32:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在python3中创建嵌套dict,我有以下列表(来自sql查询):

 [('madonna', 'Portland', 'Oregon', '0.70', '+5551234', 'music', datetime.date(2016, 9, 8), datetime.date(2016, 9, 1)), ('jackson', 'Laredo', 'Texas', '2.03', '+555345', 'none', datetime.date(2016, 5, 23), datetime.date(2016, 5, 16)), ('bohlen', 'P', 'P', '2.27', '+555987', 'PhD Student', datetime.date(2016, 9, 7))]

我希望得到以下输出:

{madonna:{city:Portland, State:Oregon, Index: 0.70, Phone:+5551234, art:music, exp-date:2016, 9, 8, arrival-date:datetime.date(2016, 5, 23)},jackson:{city: Laredo, State:Texas........etc...}}

有人能给我一个简单易懂的代码吗?你知道吗

我试着:

from collections import defaultdict
usercheck = defaultdict(list)
for accname,  div_ort,  standort,  raum,  telefon,  position,  exp, dep in cur.fetchall():
    usercheck(accname).append[..]

但这不管用,我自己想不下去了


Tags: citydatetimedatemusicpython3stateportlandoregon
3条回答

使用defaultdict时,参数指定字典中的默认值类型。你知道吗

from collections import defaultdict
usercheck = defaultdict(dict)
for accname,  div_ort,  standort,  raum,  telefon, position,  exp, dep in cur.fetchall():
    usercheck[accname]['city'] = div_ort
    usercheck[accname]['state'] = standout
    ...

字典中的键是使用[key]而不是(key)引用的。你知道吗

您可以使用Dict Comprehension(definedhere)根据列表的元素动态创建字典:

sql_list = [
    ('madonna', 'Portland', 'Oregon', '0.70', '+5551234', 'music', datetime.date(2016, 9, 8), datetime.date(2016, 9, 1)),
    ('jackson', 'Laredo', 'Texas', '2.03', '+555345', 'none', datetime.date(2016, 5, 23), datetime.date(2016, 5, 16)),
    ('bohlen', 'P', 'P', '2.27', '+555987', 'PhD Student', datetime.date(2016, 9, 7))
]
sql_dict = {
    element[0]: {
        'city': element[1],
        'state': element[2],
        'index': element[3],
        'phone': element[4],
        'art': element[5],
    } for element in sql_list
}

请记住,字典中的每个项都需要有一个键和一个值,在您的示例中,有几个值没有键。你知道吗

如果有列列表,可以使用^{}函数:

from collections import defaultdict
import datetime

# list of columns returned from your database query
columns = ["city", "state", "index", "phone", "art", "exp-date", "arrival-date"]
usercheck = defaultdict(list)
for row in cur.fetchall():
    usercheck[row[0]] = defaultdict(list, zip(columns, row[1:]))

print usercheck

这将输出一个字典,如:

defaultdict(<type 'list'>, {'madonna': defaultdict(<type 'list'>, {'city': 'Portland', 'art': 'music', 'index': '0.70', 'phone': '+5551234', 'state': 'Oregon', 'arrival-date': datetime.date(2016, 9, 1), 'exp-date': datetime.date(2016, 9, 8)}), 'jackson': defaultdict(<type 'list'>, {'city': 'Laredo', 'art': 'none', 'index': '2.03', 'phone': '+555345', 'state': 'Texas', 'arrival-date': datetime.date(2016, 5, 16), 'exp-date': datetime.date(2016, 5, 23)}), 'bohlen': defaultdict(<type 'list'>, {'city': 'P', 'art': 'PhD Student', 'index': '2.27', 'phone': '+555987', 'state': 'P', 'arrival-date': None, 'exp-date': datetime.date(2016, 9, 7)})})

相关问题 更多 >