【问题标题】:getting data from nested Dictionary in Python从 Python 中的嵌套字典中获取数据
【发布时间】:2017-11-02 03:18:52
【问题描述】:

我一直在尝试从 python 中的多级字典中提取数据 我从中提取的字典示例是:

{"family": {
"name": "Mary",
"age": "32",
"sex": "female",
"kids": [
  {
    "name": "jim",
    "age": "10",
    "sex": "male",
    "dob_year": "2007",
    "ssn": "123-23-1234"
  },
  {
    "name": "jill",
    "age": "6",
    "sex": "female",
    "dob_year": "2011",
    "ssn": "123-23-1235"
  }]}}


ss = test0["family"]["kids"]

def search(values, lookup):
    for k in values:
        for v in values:
            if lookup in v:
                return k
    return None
print search(ss, '201')

我的目标是让它在嵌套字典的值中搜索关键字(不精确),如果要求 ssn,则返回完整的字典或特定键的值,如“23-23-1235”。

需要它返回 {"name":"jill","age":"6","sex":"female","dob_year":"2011","ssn":"123-23-1235 "} 的不同级别的请求值。

现在它只显示:{"name": "jim","age": "10","sex": "male", "dob_year": "2007","ssn": "123-23-1234"}

【问题讨论】:

  • 检查你的循环逻辑,你应该使用dict.iteritems()来阅读字典中的项目。

标签: python dictionary


【解决方案1】:

试试这个方法:

test0 = {"family": {
"name": "Mary",
"age": "32",
"sex": "female",
"kids": [
  {
    "name": "jim",
    "age": "10",
    "sex": "male",
    "dob_year": "2007",
    "ssn": "123-23-1234"
  },
  {
    "name": "jill",
    "age": "6",
    "sex": "female",
    "dob_year": "2011",
    "ssn": "123-23-1235"
  }]}}


ss = test0["family"]["kids"]
def search(values, lookup):
    for k in values:
        if any(lookup in str(s) for s in k.values()):
            return k
    return None
print search(ss, '201')

它会打印出来:

{'age': '6', 'dob_year': '2011', 'name': 'jill', 'ssn': '123-23-1235', 'sex': 'female'}

【讨论】:

  • 适用于该特定字典,但如果我切换字典,我会得到“'int' 类型的参数不可迭代”它的格式相同,只是键和值不同
  • @KAM_00 我认为dict值中有整数,你可以用函数str()转换成字符串。
【解决方案2】:

如果匹配两个结果怎么办?

如果它匹配多个结果但仍然只返回一个返回,因为函数一次通过内存返回一个,因此解决方案是将结果存储在某处,例如使用列表存储结果,然后最后返回它,首先让我们看看它是否匹配两个结果然后是什么问题:

简单的解决方案

 def search(values, lookup):
        for item in values:
            for key,value in item.items():
                if lookup in value:
                    return item
        return None
    print(search(ss, '20'))

它匹配两个结果,但输出是:

{'dob_year': '2007', 'ssn': '123-23-1234', 'sex': 'male', 'age': '10', 'name': 'jim'}

所以解决办法是:

def search(values, lookup):
    result = []

    for item in values:
        for key,value in item.items():
            if lookup in value:
                if item not in result:
                    result.append(item)

    if result:
        return result
    else:
        return None
print(search(ss, '20'))

输出:

[{'ssn': '123-23-1234', 'sex': 'male', 'dob_year': '2007', 'age': '10', 'name': 'jim'}, {'ssn': '123-23-1235', 'sex': 'female', 'dob_year': '2011', 'age': '6', 'name': 'jill'}]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-24
    • 2022-10-07
    • 2021-12-24
    • 2015-03-23
    • 2018-04-20
    • 1970-01-01
    • 2021-10-29
    • 2014-07-21
    相关资源
    最近更新 更多