使用字典理解时如何避免丢失键的错误

Posted

技术标签:

【中文标题】使用字典理解时如何避免丢失键的错误【英文标题】:How to avoid error on missing keys when using dict comprehension 【发布时间】:2018-08-11 03:28:33 【问题描述】:

如何在 pd.DataFrame.from_dict 理解迭代中忽略丢失的键?

@jezrael 在这里回答了我关于使用字典值制作 df 的问题:

https://***.com/a/49072184/9242601

但我遇到了Key Error: 'fees' 错误,因为并非所有“客户”都有“费用”键,因此我希望迭代只移动到下一个客户而不记录该客户,而不是生成错误在df中。

我仍然需要一个数据框,所以 try... exceptif key in dict 不起作用,因为我最终会得到一个空(或不存在)的 df。

很抱歉将这个问题有效地传播到两个问题上,但我认为不值得重复完整的初始问题(因此链接)。

谢谢。

【问题讨论】:

if key in dct k: dict(v.get('fees')) for k, v in d.items() 如果您不介意将 None 存储为缺少密钥的项目的值。 df = pd.DataFrame.from_dict(k: .setdefault('fees', v.get('fees',[])) for k, v in d.items(), orient='index') - 如果不存在,则提供空的默认费用列表 - 不确定这是否适合您的数据 Check if a given key already exists in a dictionary的可能重复 【参考方案1】:

有几种不同的方法可以解决这个问题。

一种方法是使用try except 语句来捕获错误。

另一种方法是测试密钥在字典key in dict 中。

另一个是使用dict的get方法dict.get(key, default = None),如果找不到该值,默认选项将返回None,或者您可以将其设置为您需要的。

【讨论】:

对 3 个 ppls cmets 进行了很好的总结,在您的“答案”之前发布了 4 分钟以上... 我没有看到有人在 cmets 中提到 try except 或 get 方法 这可能是因为在 df2 = pd.DataFrame.fro... 语句周围创建 try ... catch 会使您的数据为零 - 它根本不会创建任何 Dataframe ...【参考方案2】:

链接没问题 - 它在 *** 中,不会去任何地方。

满足dict.get 方法。作为序言,这几乎是您需要了解的所有内容:

>>> d = 'present': 'real_value'
>>> d.get('present')
'real_value'
>>> d.get('absent') is None
True
>>> d.get('absent', 'default')
'default'

你应该发现修改后的理解

k: dict(v['fees']) for k, v in d.items() if v.get('fees') is not None

满足您的需求,但这是未经测试的代码。可能更具可读性是

k: dict(v['fees']) for k, v in d.items() if 'fees' in v

【讨论】:

感谢holdenweb。解决了我的问题就好了

以上是关于使用字典理解时如何避免丢失键的错误的主要内容,如果未能解决你的问题,请参考以下文章

Eclipse启动时,项目文件丢失了,这种问题如何避免?

如何避免丢失 Post 请求数据

Python - 如何在遍历字典列表时处理丢失的键? [复制]

在 Cassandra 中使用轻量级事务 (CAS) 时,我们如何避免丢失写入?

Swift 中如何避免精度丢失

04-05 | AOF日志:宕机了,Redis如何避免数据丢失?