Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何避免使用dict理解时出现缺键错误_Python_Python 3.x_Pandas_Dictionary - Fatal编程技术网

Python 如何避免使用dict理解时出现缺键错误

Python 如何避免使用dict理解时出现缺键错误,python,python-3.x,pandas,dictionary,Python,Python 3.x,Pandas,Dictionary,如何从dict中忽略pd.DataFrame中缺少的键 @jezrael善意地回答了我关于使用字典值生成df的问题: 但是我遇到了一个键错误:“fees”错误,因为不是所有的“客户”都有一个“fees”键,所以我希望迭代只移动到下一个客户,而不是在df中记录该客户 我仍然需要一个数据帧,所以试试。。。除了和如果输入dict将不起作用,因为我将得到一个空的(或不存在的)df 很抱歉将这个问题有效地分散在两个问题上,但我认为不值得重复完整的初始问题(因此链接) 谢谢。有几种不同的方法可以解决这个问

如何从dict中忽略pd.DataFrame中缺少的键

@jezrael善意地回答了我关于使用字典值生成df的问题:

但是我遇到了一个
键错误:“fees”
错误,因为不是所有的“客户”都有一个“fees”键,所以我希望迭代只移动到下一个客户,而不是在df中记录该客户

我仍然需要一个数据帧,所以
试试。。。除了
和如果输入dict将不起作用,因为我将得到一个空的(或不存在的)df

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


谢谢。

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

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

另一种方法是测试按键是否在dict
按键在dict


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

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

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

另一种方法是测试按键是否在dict
按键在dict


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

链接没有问题-它处于Stackoverflow状态,不会去任何地方

满足
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}

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

满足
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}

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'))
-如果不存在,则提供一个空的默认费用列表-不确定这是否适合您的数据如果在dct中键入或
{k:dict(v.get('fees')用于k,v in d.items()}
,如果您不介意将
none
存储为缺少键的项目的值。或
df=pd.DataFrame.from_dict({k:{}.setdefault('fees',v.get('fees',[])为k,v为d.items(),orient='index')
-如果没有默认费用列表,则提供一个空的默认费用列表-不确定这是否符合您的数据可能与“回答”前4分钟发布的3条ppls评论的良好摘要重复…我没有看到任何人在评论中提到try或get方法,这可能是因为创建了一个
try。。。抓住
df2=pd.DataFrame.fro…
语句周围的
catch…
会给您留下零数据-它根本不会创建任何数据帧…对在“回答”前4分钟以上发布的3条ppls评论进行了很好的总结…我没有看到任何人在评论中提到try或get方法,这可能是因为创建了一个
try。。。捕获
df2=pd.DataFrame.fro…
语句周围的
将为您留下零数据-它根本不会创建任何数据帧…感谢holdenweb。很好地解决了我的问题谢谢holdenweb。很好地解决了我的问题