提取列表中字典的值

时间:2020-01-28 12:15:41

标签: python list dictionary key

据我了解,我在列表中有以下字典:

[{'week':3,'timing':'07:30'},{'week':4,'timing':'20:30'},{},....]

我想提取时间和星期,并将它们放在单独的列表中。但是,由于外部有一个列表,因此无法识别任何键。我试图做的是以下事情:

for item in list:
    new_list =list( item.values() )[0] 

但是它显示出错误,因为我认为其中有些是空白的。当前,我得到以下错误:IndexError:列表索引超出范围。 如何将它们提取到两个单独的列表中,并用NaN表示空白?

3 个答案:

答案 0 :(得分:3)

以下代码将有助于分别提取星期和时间值

check = [{'week': 3, 'timing': '07:30'}, {'week': 4, 'timing': '20:30'}]
week_list = []
timing_list=[]
for i in check:
    for k,v in i.items():
        if k == 'week':
            week_list.append(v)
        else:
            timing_list.append(v)


Output
```[3, 4]
['07:30', '20:30']

答案 1 :(得分:1)

首先创建两个列表,然后附加各项。应当对列表中的每个对象进行迭代,每个对象都是字典本身。假设包含字典的列表称为full_list,因为将其命名为list对于python来说不​​太方便。

week_list = []
timing_list = []

for i in full_list:
   week_list.append(i['week'])
   timing_list.append(i['timing'])

例如,如果存在具有空值的字典,空字典或仅具有week但没有timing的字典,我喜欢使用:

import numpy as np
for i in full_list:
    try:
       week_list.append(i['week'])
    except KeyError:
       week_list.append(np.nan)
    try:
       timing_list.append(i['timing'])
    except KeyError:
        timing_list.append(np.nan)

这样,只要密钥不存在,您就会在列表中附加一个NaN值,如果以后要对列表执行操作,这将很有帮助。

完整示例:

full_list = [{'week': 3, 'timing': '07:30'}, {'week': 4, 'timing': '20:30'},{},{'week':4},{'timing':'09:21'},{}]
week_list = []
timing_list = []
import numpy as np
for i in full_list:
    try:
       week_list.append(i['week'])
    except KeyError:
       week_list.append(np.nan)
    try:
       timing_list.append(i['timing'])
    except KeyError:
        timing_list.append(np.nan)
print(week_list)
print(timing_list)

输出:

[3, 4, nan, 4, nan, nan]
['07:30', '20:30', nan, nan, '09:21', nan]

编辑:

如果字典如下:

full_dict = {'person_1':{'week': 3, 'timing': '07:30'},'person_2':{'week': 4, 'timing': '20:30'},'person_3':{}}

应该对每个key执行一次迭代。因此循环将是:

for i in full_dict.keys():
    and exactly the same code as before

答案 2 :(得分:0)

我用这段代码分别提取了它们。

weeks = [ a['week'] for a in new_list ]

timings = [ a['timing'] for a in new_list ]