将一本词典的选择性元素添加到另一本词典

Bog*_*ota 0 python dictionary list python-3.x

我有一个列表:

my_list = ["10", "12", "32", "23"]
Run Code Online (Sandbox Code Playgroud)

和字典:

my_dict = {
    'one': {'index': 0, 'sec_key': 'AB', 'id': '10'},
    'two': {'index': 0, 'sec_key': 'CD', 'id': '12'}, 
    'three': {'index': 0, 'sec_key': 'EF', 'id': '32'}
    }
Run Code Online (Sandbox Code Playgroud)

我想保留一个字典,说 final_dict,只有当 id 出现在 my_list 中时,它才会包含 my_dict 的内容。我试图通过以下方式做到这一点:

sf_dict = dict()

for list_id in my_list:
    for key, value in my_dict.items():
        if list_id == value['id']:
            print("Values : {} {} {}".format(value['index'], value['sec_key'], value['id']))
            sf_dict[key] = key
            sf_dict[key]['index'] = value['index']  
            sf_dict[key]['sec_key'] = value['sec_key']
            sf_dict[key]['id'] = value['id']
        
print(sf_dict)
Run Code Online (Sandbox Code Playgroud)

我能够打印这些值,但是由于以下错误,这些值的分配失败了:

TypeError: 'str' object does not support item assignment
Run Code Online (Sandbox Code Playgroud)

我哪里出错了?

Pac*_*oss 5

您可以使用字典理解来遍历您的my_dict并检查存储在的值id是否在您的列表中。

my_list = ["10", "12", "32", "23"]
my_dict = {
    'one': {'index': 0, 'sec_key': 'AB', 'id': '10'},
    'two': {'index': 0, 'sec_key': 'CD', 'id': '12'}, 
    'three': {'index': 0, 'sec_key': 'EF', 'id': '32'}
    }

result = {key:value for key, value in my_dict.items() if value['id'] in my_list}

#{'one': {'index': 0, 'sec_key': 'AB', 'id': '10'}, 'two': {'index': 0, 'sec_key': 'CD', 'id': '12'}, 'three': {'index': 0, 'sec_key': 'EF', 'id': '32'}}

my_list = ["10"]

#{'one': {'index': 0, 'sec_key': 'AB', 'id': '10'}}
Run Code Online (Sandbox Code Playgroud)