在python3中创建嵌套的dictionarys

时间:2016-02-08 15:11:15

标签: python python-3.x dictionary

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

 [('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[..]

但这不起作用,我自己也想不到了

3 个答案:

答案 0 :(得分:1)

您可以使用Dict Comprehension(已定义here)根据列表元素动态创建字典:

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
}

请记住,字典中的每个项目都需要有一个键和一个值,在您的示例中,您有一些没有键的值。

答案 1 :(得分:1)

如果您有列的列表,则可以使用zip函数:

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)})})

这将输出如下字典:

composer install

答案 2 :(得分:0)

使用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)