在python中将列表更改为字典[重复]

问题描述 投票:-1回答:2

这个问题在这里已有答案:

嗨,我有一个清单:

lst = ['Bedroom,24', 'Bedroom,26', 'Kitchen,22', 'Kitchen,23', 'Living Room,23', 'Living Room,24', 'Living Room,25']

现在我想不出任何可以将其更改为字典的方法:

lst = {'temp':24,.....}

我尝试更换逗号,但它自列表以来没有用。我用于循环,但似乎没有工作,加上我是一个begginer,我不知道如何将数字更改为整数。下面的示例使列表:

fname = open("temps1.txt")     
lst = []    

for line in fname:
  line = line.rstrip()      
  words = line.splitlines() 

    for word in words:
    if word in lst: continue
    lst = lst + words     
  lst.sort() 
print(lst)

>>>>>>['temp,24', 'bedroom,26', 'class,23'] #output

最后,是否可以将列表转换为字典? 我的输出应该是:

 Average temp:
 bedroom: #value
 living room:#value

等等

python dictionary
2个回答
0
投票

你应该遍历列表,然后你应该使用逗号分开它。你可以做这样的事情。

lst = ['temp,24','bedroom,26','class,23']

dict_obj = dict()
for element in lst:
    dict_obj[element.split(',')[0]] = int(element.split(',')[1])

print(dict_obj)

更新由于OP的要求是找到数据的平均值,因此方法会发生变化

lst = ['Bedroom,24', 'Bedroom,26', 'Kitchen,22', 'Kitchen,23', 'Living Room,23', 'Living Room,24', 'Living Room,25']

dict_obj = dict()
for element in lst:
    if element.split(',')[0] in dict_obj:
        dict_obj[element.split(',')[0]]['temperature_reading'].append(int(element.split(',')[1]))
        dict_obj[element.split(',')[0]]['average_temperature'] = sum(dict_obj[element.split(',')[0]]['temperature_reading']) / len(dict_obj[element.split(',')[0]]['temperature_reading'])
    else:
        dict_obj[element.split(',')[0]] = {'temperature_reading' : [int(element.split(',')[1])],
                                           'average_temperature' : element.split(',')[1]}

print(dict_obj)

输出:

{
    'Bedroom': {'average_temperature': 25.0, 'temperature_reading': [24, 26]},
    'Kitchen': {'average_temperature': 22.5, 'temperature_reading': [22, 23]},
    'Living Room': {'average_temperature': 24.0,
                 'temperature_reading': [23, 24, 25]}
}

0
投票

最简单的:

print(dict([(i.split(',')[0],int(i.split(',')[1])) for i in lst]))

输出:

{'temp': 24, 'bedroom': 26, 'class': 23}
© www.soinside.com 2019 - 2024. All rights reserved.