为了账号安全,请及时绑定邮箱和手机立即绑定

解析嵌套字典Python中的列表

解析嵌套字典Python中的列表

大话西游666 2023-05-16 15:52:50
data = {    "persons": {"1": {"name": "siddu"}, "2": {"name": "manju"}},    "cars": {        "model1": {            "make": 1990,            "company_details": {                "name": "Ford Corporation",                "country": "US",                "some_list": [1, 2, 1],            },        },        "model2": {            "make": 1990,            "company_details": {                "name": "Ford Corporation",                "country": "US",                "some_list": [1, 2, 1, 1, 1],            },        },    },}这是我的 python 对象,如何识别键值是一个列表。这里的例子,在遍历'print(data["cars"]["model1"]["company_details"]["some_list"])'之后我得到了列表,因为它是一个小字典很容易,但我怎么能如果我将来遇到 list 作为其他键的值,则标识相同。例子:data = {    "persons": {"1": {"name": "siddu"}, "2": {"name": "manju"}},    "cars": {        "model1": {            "make": 1990,            "company_details": {                "name": "Ford Corporation",                "country": "US",                "some_list": [1, 2, 1],            },        },        "model2": {            "make": 1990,            "company_details": {                "name": "Ford Corporation",                "country": ["US", "UK", "IND"],                "some_list": [1, 2, 1, 1, 1],            },        },    },}任何人都可以建议/指导我了解如何识别键的值是一个列表。最终目标是删除列表中的重复项(如果存在)?非常感谢:)
查看完整描述

1 回答

?
慕码人2483693

TA贡献1860条经验 获得超9个赞

你可以有一个递归函数,它可以达到任何深度,并使列表中的项目独一无二,如下所示:


In [8]: def removeDuplicatesFromList(di):

   ...:     for key, val in di.items():

   ...:         if isinstance(val, dict):

   ...:             removeDuplicatesFromList(val)

   ...:         elif isinstance(val, list):

   ...:             di[key] =list(set(val))

   ...:         else:

   ...:             continue

   ...:

   ...:

In [9]: removeDuplicatesFromList(data)


In [10]: data

Out[10]:

{'persons': {'1': {'name': 'siddu'}, '2': {'name': 'manju'}},

 'cars': {'model1': {'make': 1990,

   'company_details': {'name': 'Ford Corporation',

    'country': 'US',

    'some_list': [1, 2]}},

  'model2': {'make': 1990,

   'company_details': {'name': 'Ford Corporation',

    'country': 'US',

    'some_list': [1, 2]}}}}


查看完整回答
反对 回复 2023-05-16
  • 1 回答
  • 0 关注
  • 107 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信