Python 如何避免使用dict理解时出现缺键错误
如何从dict中忽略pd.DataFrame中缺少的键 @jezrael善意地回答了我关于使用字典值生成df的问题: 但是我遇到了一个Python 如何避免使用dict理解时出现缺键错误,python,python-3.x,pandas,dictionary,Python,Python 3.x,Pandas,Dictionary,如何从dict中忽略pd.DataFrame中缺少的键 @jezrael善意地回答了我关于使用字典值生成df的问题: 但是我遇到了一个键错误:“fees”错误,因为不是所有的“客户”都有一个“fees”键,所以我希望迭代只移动到下一个客户,而不是在df中记录该客户 我仍然需要一个数据帧,所以试试。。。除了和如果输入dict将不起作用,因为我将得到一个空的(或不存在的)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。很好地解决了我的问题