【问题标题】:Extracting values of a dictionary within a list在列表中提取字典的值
【发布时间】:2020-01-28 12:15:41
【问题描述】:

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

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

我想提取时间和星期并将它们放在单独的列表中。但是,由于外面有一个列表,因此无法识别密钥。我试图做的是:

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

但它显示了一个错误,因为我认为其中一些是空白的。目前,我收到错误:IndexError: list index out of range。 如何将它们提取到两个单独的列表中并在它们为空的地方使用 NaN?

【问题讨论】:

  • 你可以先过滤空列表:for d in list: if not d: continue; ....

标签: python list dictionary key


【解决方案1】:

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

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']

【讨论】:

  • 关于这个答案我唯一可以质疑的是它没有考虑字典在列表中的位置。因此,如果您有空/不完整的字典,那么它们的位置将不会受到尊重,并且在进一步使用数据框中的数据或分析数据时可能会带来一些困难。另外,你为什么用if而不是key追加?
【解决方案2】:

您首先创建两个列表并附加项目。应该对列表中的每个对象进行迭代,每个对象都是字典本身。假设包含字典的列表称为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

【讨论】:

  • 我认为 OP 的字典有时缺少一个或另一个键:值对。
  • 感谢您的回复,只是由于某种原因它无法识别字符串,无论是时间还是星期。
  • ti 不识别是什么意思?你有错误吗?您能否提供更多信息来帮助您修复它?
  • @CeliusStingher 现在我对我的问题有了更好的理解,我认为你的方式更安全。谢谢您的意见。如果你有钥匙,你会添加什么?所以你有例如:person1 和 person 2 作为键,然后对于这两个你有星期和时间
  • 我将编辑答案,以便您查看。但基本上不是迭代列表中的项目,我们必须迭代每个键。就这么简单
【解决方案3】:

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

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

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

【讨论】:

    猜你喜欢
    • 2020-07-21
    • 1970-01-01
    • 2016-09-24
    • 2021-04-06
    • 1970-01-01
    • 2021-09-26
    • 1970-01-01
    • 2018-08-30
    • 2022-07-12
    相关资源
    最近更新 更多