【问题标题】:Accessing keys and values within them in a dictionary在字典中访问其中的键和值
【发布时间】:2020-05-15 03:42:01
【问题描述】:

我在 python 中有一个字典,我想根据我拥有的键提取一些值。对于每一行,我有 3 个键(到达、dep、代码),有时它们都会出现,但有时只存在 1 或 2 个。如果存在键,我希望每一行都取值,否则将其设置为不可用或 0。这是我的示例数据:

示例数据

dict_items([('arrival', {'week': 3, 'timing': '15:30'}), ('code', '123')])

dict_items([('dep', {'week': 3, 'timing': '10:15'}), ('code', '456')])

dict_items([('arrival', {'week': 4, 'timing': '22:30'}), ('dep', {'week': '', 'timing': ''}), ('code', '567')])            

dict_items([('dep', {'week': 7, 'timing': '23:00'})    

输出包括 5 个列表

arrival_week_list []

arrival_timing_list []

dep_week_list []

dep_timing_list []

code []  

到目前为止,这是我的代码,我最初尝试过它只是为了获得“到达”的一周(“dep”内也有一周)

for i in list:
    for row in i:
        try:
            arrival_week_list.append(i['week'])
        except KeyError:
                arrival_week_list.append(np.nan)
        print(arrival_week_list)

但我得到一个错误:TypeError: list indices must be integers or slices, not str

【问题讨论】:

  • rowlist 而不是 dict
  • 我没有包含循环的第一行,在第一次迭代中我访问了字典,然后我对如何继续感到困惑
  • 在我看来你想定义一个类。尝试用 dicts 来做这件事真的很烦人而且无法维护。

标签: python list dictionary


【解决方案1】:

错误来自行['week']。

您的字典是一个列表,例如

[('arrival', {'week': 3, 'timing': '15:30'}), ('code', '123')]

你可能想做的是

a = [('arrival', {'week': 3, 'timing': '15:30'}), ('code', '123')]
a[0][1]['week']
3

例如访问 3

a[0] 给你一个元组 ('arrival, {'week': 3, 'timing': '15:30'}) 例如, a[0][1] 进入字典。

【讨论】:

  • 对不起,我没有完全理解,我有一个列表,其中有一个字典 我如何根据键访问字典的值?我得到了你的例子,但不完全
  • 基本上我如何循环执行?
【解决方案2】:

您必须根据dict 中的键选择要在哪个列表中添加值,这是我的方法:

data = {
    'arrival': {
        'week': [],
        'timing': [],
    },
    'dep': {
        'week': [],
        'timing': [],
    },
    'code': []
}

for my_dict in my_list:
    for key, values in my_dict.items():
        if isinstance(values, dict):
            for k, v in values.items():
                data[key][k].append(v)
        else:
            data[key].append(values)

arrival_week_list = data['arrival']['week']

arrival_timing_list = data['arrival']['timing']

dep_week_list = data['dep']['week']

dep_timing_list = data['dep']['timing']

code = data['code']
print(arrival_week_list)
print(arrival_timing_list)
print(dep_week_list)
print(dep_timing_list)
print(code)

输出:

[3, 4]
['15:30', '22:30']
[3, '', 7]
['10:15', '', '23:00']
['123', '456', '567']

【讨论】:

  • 感谢您的意见,我很难理解“数据”代表什么。我只有一个列表,其中包含多个字典,而不是多个列表。
  • data 是一种中间数据结构,以简单的方式保存您的信息,如果需要,您可以使用数据而不是列表
  • 我没有那个数据组件,我有点困惑,不知道你能不能提供一些替代方案。最初我有一个包含字典的列表,当我遍历列表时,我没有字典名称
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-03
  • 2022-01-25
  • 2015-08-07
相关资源
最近更新 更多