从di获取信息的最佳方式

2024-10-02 16:20:50 发布

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

我有一个具有“多层”的dict(我真的不知道如何称呼它),我只想从中使用很少的信息。这是格言:

{'userTimestamp': 1, 
 'user': {'id': '20',
          'links': {'self': [{'href': 'https://john.com'}]},
          'mail': 'john@john.com',
          'message': 'Hello world',
          'name': 'john'}
}

现在我想浏览dict,获取相关信息(在本例中是name(在user中),message)并将信息写入一个新的dict中。在python中最有效的方法是什么?你知道吗


Tags: namehttpsselfcom信息idmessagemail
3条回答

dict的全部要点是,密钥查找是人类已知的最有效的事情。如果你知道你想要什么样的东西,就不需要“看”字典了——直接把它们取出来就行了。你知道吗

userdict = my_dict["user"]

这也适用于嵌套的dict,因为在每一步,您都会再次得到一个纯的dict,这和外部的一样有效。你知道吗

username = my_dict["user"]["name"]

为了从旧项目的单个项目创建一个新的dict,只需将项目检索和dict创建混合在一起。你知道吗

my_new_dict = {
    'foo' : 'bar',
    'user_name' : my_dict["user"]["name"], # this will be 'john'
    'user_info' : my_dict["user"], # this will be the dict my_dict["user"]
    'user_meta' : {key: my_dict["user"][key] for key in ('name', 'mail')}, # this will be a subset of the dict my_dict["user"]
  }

对于一些真正有活力的东西,我会用这样的东西。你知道吗

original_dict = {
    'name': "Rahul",
    'userTimestamp': 1,
    'user': {'id': '20',
             'links': {'self': [{'href': 'https://john.com'}]},
             'mail': 'john@john.com',
             'message': 'Hello world',
             'name': 'john'}
}

def get_dict_with_relevant_fields(orig_dict, interesting_fields):
    new_dict = {}
    for key, value in orig_dict.iteritems():
        if key in interesting_fields:
            new_dict[key] = value
        elif isinstance(value, dict):
            new_dict.update(get_dict_with_relevant_fields(value, interesting_fields))

    return new_dict

所以我可以这样称呼:

get_dict_with_relevant_fields(original_dict, ["id", "name"])

但是,如果您知道数据的确切结构和有限字段的位置以及它们在结构中的位置。我总是喜欢这样:

new_dict = { 
    'name': original_dict['user']['name']
    'message': original_dict['user']['message']
}

更好的是,如果我已经有了上面的实用函数,我将按如下方式使用它:

get_dict_with_relevant_fields(original_dict['user'], ['name', 'message'])

当然,我假设没有性能消耗,而且上述函数可以很容易地在性能方面做得更好。你知道吗

我建议如下:

new_dict = {}
new_dict["name"] = dict["user"]["name"]
new_dict["message"] = dict["user"]["message"]

相关问题 更多 >