字典可以包含字符串或数组

2024-06-26 13:43:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我想访问字典中的ID,但是ID 90%是字符串,10%是数组

这适用于字符串

IDs = MemberData.get('MemberDetails', {}).get('ID')

但是,数据可以通过任何一种方式获得:

{ MemberData: {MemberDetails: [{'ID':55,'name':'John'},{'ID':56,'name':'Mike'}] }}

{ MemberData: {MemberDetails: {'ID':55,'name':'John'} }}

如何将这两个实例返回为

IDs = [55,56]
IDs = [55]

Tags: 数据实例字符串nameididsget字典
3条回答

isinstance是检查您所拥有的内容并以不同方式处理不同行为的好方法

ids = MemberData.get('MemberDetails', {}).get('ID')

if isinstance(ids, dict):
  id_list = [ids['ID']]
elif isinstance(ids, list):
  id_list = [x['ID'] for x in ids]
else:
  # handle an error
  id_list = []

您可以编写一个函数来检查实例是否为列表,并在元素上迭代,否则假设为字典

def fetch_ids(x):
    if isinstance(x, list):
        return [z.get('ID') for z in x]
    else:
        return [x.get('ID')]

ids = fetch_ids(MemberData.get('MemberDetails', {}))

这将适用于两种情况:

def extract(d):
    data = d['MemberData']['MemberDetails']
    return [x['ID'] for x in data] if isinstance(data, list) else [data['ID']]

例如:

d1 = {'MemberData': {'MemberDetails': [{'ID':55, 'name':'John'}, {'ID':56, 'name':'Mike'}]}}
d2 = {'MemberData': {'MemberDetails': {'ID':55, 'name':'John'}}}

extract(d1)
=> [55, 56]
extract(d2)
=> [55]

相关问题 更多 >