如何将列表转换为嵌套字典?

2024-10-03 23:27:13 发布

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

初学者程序员在这里。我有两个问题

  1. 将列表转换为嵌套字典:

    房价=[‘20万英镑’、‘30万英镑’、‘50万英镑’]

我想把它变成--

House_price_dict = {
'house1': {'price':'£200k'},
'house2': {'price':'£300k'},
'house3': {'price:'£500k'},
}
  1. 将两个列表转换为嵌套字典:

    房价=[‘20万英镑’、‘30万英镑’、‘50万英镑’]

    卧室数量=[2,3,5]

我想变成--

house_info_dict = {
    'house1': {
        'price':'£200k',
        'no_of_bedrooms':2,
        },
    'house2': {
        'price':'£300k',
        'no_of_bedrooms': 3,
        },
    'house3': {
        'price:'£500k',
        'no_of_bedrooms': 5,
        },
    }

Tags: ofno列表字典pricedict程序员house
3条回答

zip函数获取多个列表,并返回每个列表中包含一个元素的元组:

>>> house_prices = ['200k', '300k', '500k']
>>> no_of_bedrooms = [2, 3, 5]
>>>
>>> list(zip(house_prices, no_of_bedrooms))
[('200k', 2), ('300k', 3), ('500k', 5)]
>>>

zip返回一个生成器,所以我将其转换为上面的列表以查看结果

有一个内置枚举函数,可返回列表中的索引和值:

>>> for i, n in enumerate(['a', 'b', 'c'], start=1):
...     print(i, n)
...
1 a
2 b
3 c
>>>

将两者结合起来,可以得到:

>>> list(enumerate(zip(house_prices, no_of_bedrooms), start=1))
[(1, ('200k', 2)), (2, ('300k', 3)), (3, ('500k', 5))]

你可以把它输入到听写理解中:

>>> house_info_dict = {'house%d' % i: {
...     'price': p,
...     'no_of_bedrooms': n
... } for i, (p, n) in enumerate(zip(house_prices, no_of_bedrooms), start=1)}
>>> house_info_dict
{'house3': {'no_of_bedrooms': 5, 'price': '500k'}, 'house2': {'no_of_bedrooms': 3, 'price': '300k'}, 'house1': {'no_of_bedrooms': 2, 'price': '200k'}}

以更漂亮的格式打印的技巧是使用json模块:

>>> import json
>>> print(json.dumps(house_info_dict, indent=4))
{
    "house3": {
        "no_of_bedrooms": 5,
        "price": "500k"
    },
    "house2": {
        "no_of_bedrooms": 3,
        "price": "300k"
    },
    "house1": {
        "no_of_bedrooms": 2,
        "price": "200k"
    }
}
>>>
d = {} 
for i in xrange(len(house_prices)):
    d["house{}".format(i+1)] = { "price": house_prices[i] }

第二部分:

d = {} 
for i in xrange(len(house_prices)):
    d["house{}".format(i+1)] = { "price": house_prices[i], 'no_of_bedrooms': no_of_bedrooms[i] }

请注意house_pricesno_of_bedrooms的大小必须相同,否则IndexError将被提升

我们可以用词来理解任何东西

house_prices = ['£200k', '£300k', '£500k']
House_price_dict = {f'house{idx}':{'price':i} for idx, i in enumerate(house_prices, start=1)}

#{'house1': {'price': '£200k'},
# 'house2': {'price': '£300k'},
# 'house3': {'price': '£500k'}}

no_of_bedrooms = [2, 3, 5]
house_info_dict = {f'house{idx}':{'price':i[0], 'no_of_bedrooms': i[1]} for idx, i in enumerate(zip(house_prices, no_of_bedrooms), start=1)}

#{'house1': {'price': '£200k', 'no_of_bedrooms': 2},
# 'house2': {'price': '£300k', 'no_of_bedrooms': 3},
# 'house3': {'price': '£500k', 'no_of_bedrooms': 5}}

相关问题 更多 >