【问题标题】:how can I extract values from this dictionary in Python?如何在 Python 中从该字典中提取值?
【发布时间】:2022-03-06 00:59:36
【问题描述】:

我有一本这样的字典:

{"message":"{\"_\":\"user\",\"pFlags\":{\"contact\":true},\"flags\":2175,\"id\":379951860,\"access_hash\":\"6967195540985199805\",\"first_name\":\"پژوا\",\"last_name\":\"روزبهی\",\"username\":\"mramtd2\",\"phone\":\"989157145632\",\"photo\":{\"_\":\"userProfilePhoto\",\"photo_id\":\"1631880813210609625\",\"photo_small\":{\"_\":\"fileLocation\",\"dc_id\":4,\"volume_id\":\"448413446\",\"local_id\":476387,\"secret\":\"655623158723369503\"},\"photo_big\":{\"_\":\"fileLocation\",\"dc_id\":4,\"volume_id\":\"448413446\",\"local_id\":476389,\"secret\":\"13993366131879811943\"}},\"status\":{\"_\":\"userStatusOffline\",\"was_online\":1558046876}}","phone":"989157145632","@version":"1","typ":"telegram_contacts","access_hash":"6967195540985199805","id":379951860,"@timestamp":"2020-01-26T13:50:12.793Z","path":"/home/user/mirror_01/users_5d65f610ec18aa615a5f580c.log","username":"mramtd2","type":"redis","flags":2175,"host":"ubuntu","imported_from":"telegram_contacts"}

如何从该字典中提取 first_namelast_nameidphone 值?

【问题讨论】:

  • 这个字典是否来自 JSON 文件/字符串?
  • @FélixHerbinet 来自文本文件的编号
  • 你能复制/粘贴文件的内容吗?

标签: python dictionary dataset key-value


【解决方案1】:

另外,假设你的文件有新行分隔的字典,使用下面的代码解决了这个问题:

import json
fo = open(r"C:\Users\Downloads\test.txt", "r")
for each_line in fo.readlines():
    print(json.loads(json.loads(each_line)['message'])['first_name'])
    print(json.loads(json.loads(each_line)['message'])['last_name'])
    print(json.loads(json.loads(each_line)['message'])['id'])
    print(json.loads(json.loads(each_line)['message'])['phone'])

【讨论】:

    【解决方案2】:
    import json
    
    # I have assumed your dictionary like that
    data = {"message":"{\"_\":\"user\",\"pFlags\":{\"contact\":true},\"flags\":2175,\"id\":379951860,\"access_hash\":\"6967195540985199805\",\"first_name\":\"پژوا\",\"last_name\":\"روزبهی\",\"username\":\"mramtd2\",\"phone\":\"989157145632\",\"photo\":{\"_\":\"userProfilePhoto\",\"photo_id\":\"1631880813210609625\",\"photo_small\":{\"_\":\"fileLocation\",\"dc_id\":4,\"volume_id\":\"448413446\",\"local_id\":476387,\"secret\":\"655623158723369503\"},\"photo_big\":{\"_\":\"fileLocation\",\"dc_id\":4,\"volume_id\":\"448413446\",\"local_id\":476389,\"secret\":\"13993366131879811943\"}},\"status\":{\"_\":\"userStatusOffline\",\"was_online\":1558046876}}","phone":"989157145632","@version":"1","typ":"telegram_contacts","access_hash":"6967195540985199805","id":379951860,"@timestamp":"2020-01-26T13:50:12.793Z","path":"/home/user/mirror_01/users_5d65f610ec18aa615a5f580c.log","username":"mramtd2","type":"redis","flags":2175,"host":"ubuntu","imported_from":"telegram_contacts"}
    
    # The data in "message" need to be loaded on JSON format to access it.
    data["message"] = json.loads(data["message"])
    
    # Now, you can print or whatever you want with all the data
    print(data["message"]["id"])
    print(data["message"]["first_name"])
    print(data["message"]["last_name"])
    print(data["message"]["phone"])  # There is phone info both in data["message"]["phone"] and data["phone"]. They are identical. You can use whichever you want.
    
    # Optional
    # If you want, you can assign data["message"] to a variable.
    finalData = data["message"]
    
    # Then you can access the info that you need from finalData
    print(finalData["first_name"])
    

    【讨论】:

    • 你的回答是对的。但我有一个大文本文件,它有多个这样的字典。我该怎么做?
    • 每一行是否包含一个字典,或者是否有一个包含所有字典的主字典或列表?
    【解决方案3】:

    您应该使用例如将字符串转换为字典json.loads。然后从普通的嵌套字典中提取like。

    例子:

    import json
    message = mydict["message"]
    message_dict = json.loads(message)
    message_dict['id']
    

    mydict 是您给定的输入字典。

    如果您的 sn-p 显示文件的内容,您可以执行以下操作:

    with open(filepath) as file:
        mydict = json.load(file)
    message_dict = mydict["message"]
    message_dict['id']
    

    【讨论】:

    • 这是一个文本文件
    • 您应该在问题中澄清您的 sn-p 不是代码,而是文件的内容。
    • 如果您能向我们展示一些代码行以更好地了解您卡在哪里,这将非常有帮助。是打开文件吗?是否将值读入变量?是解析json字段吗?
    【解决方案4】:

    这是另一种方法:

    import json
    
    D = {"message":"{\"_\":\"user\",\"pFlags\":{\"contact\":true},\"flags\":2175,\"id\":379951860,\"access_hash\":\"6967195540985199805\",\"first_name\":\"پژوا\",\"last_name\":\"روزبهی\",\"username\":\"mramtd2\",\"phone\":\"989157145632\",\"photo\":{\"_\":\"userProfilePhoto\",\"photo_id\":\"1631880813210609625\",\"photo_small\":{\"_\":\"fileLocation\",\"dc_id\":4,\"volume_id\":\"448413446\",\"local_id\":476387,\"secret\":\"655623158723369503\"},\"photo_big\":{\"_\":\"fileLocation\",\"dc_id\":4,\"volume_id\":\"448413446\",\"local_id\":476389,\"secret\":\"13993366131879811943\"}},\"status\":{\"_\":\"userStatusOffline\",\"was_online\":1558046876}}","phone":"989157145632","@version":"1","typ":"telegram_contacts","access_hash":"6967195540985199805","id":379951860,"@timestamp":"2020-01-26T13:50:12.793Z","path":"/home/user/mirror_01/users_5d65f610ec18aa615a5f580c.log","username":"mramtd2","type":"redis","flags":2175,"host":"ubuntu","imported_from":"telegram_contacts"}
    
    data = json.loads(D['message'])
    
    for key in ['first_name', 'last_name', 'phone', 'id']:
        print(f'{key} -> {data.get(key, "?")}')
    

    【讨论】:

      【解决方案5】:

      您可以使用以下代码提取这些值:

      import json
      
      str1 = r'{"message":"{\"_\":\"user\",\"pFlags\":{\"contact\":true},\"flags\":2175,\"id\":379951860,\"access_hash\":\"6967195540985199805\",\"first_name\":\"پژوا\",\"last_name\":\"روزبهی\",\"username\":\"mramtd2\",\"phone\":\"989157145632\",\"photo\":{\"_\":\"userProfilePhoto\",\"photo_id\":\"1631880813210609625\",\"photo_small\":{\"_\":\"fileLocation\",\"dc_id\":4,\"volume_id\":\"448413446\",\"local_id\":476387,\"secret\":\"655623158723369503\"},\"photo_big\":{\"_\":\"fileLocation\",\"dc_id\":4,\"volume_id\":\"448413446\",\"local_id\":476389,\"secret\":\"13993366131879811943\"}},\"status\":{\"_\":\"userStatusOffline\",\"was_online\":1558046876}}","phone":"989157145632","@version":"1","typ":"telegram_contacts","access_hash":"6967195540985199805","id":379951860,"@timestamp":"2020-01-26T13:50:12.793Z","path":"/home/user/mirror_01/users_5d65f610ec18aa615a5f580c.log","username":"mramtd2","type":"redis","flags":2175,"host":"ubuntu","imported_from":"telegram_contacts"}'
      
      print(json.loads(json.loads(str1)['message'])['first_name'])
      print(json.loads(json.loads(str1)['message'])['last_name'])
      print(json.loads(json.loads(str1)['message'])['id'])
      print(json.loads(json.loads(str1)['message'])['phone'])
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-11-26
        • 2023-03-17
        • 2011-10-23
        • 1970-01-01
        • 2022-01-25
        • 2021-09-03
        • 2022-11-22
        相关资源
        最近更新 更多