我有一个字典列表,如下所示:
Dict1 = [{'Title': 'Title1', 'Attributes':['name1.50', 'name2.40', 'name1.90']},
{'Title': 'Title2', 'Attributes':['name2.90', 'name1.40', 'name1.90']}]
我想遍历此字典,然后遍历每个字典中的'Attributes'
键,以查找以'name1'
开头但其中没有.90
的值,并将其从'Attributes'
键。
因此最终的字典应如下所示:
Dict1 = [{'Title': 'Title1', 'Attributes':['name1.90']},
{'Title': 'Title2', 'Attributes':['name2.90', 'name1.90']}]
我的迭代逻辑为
for item in Dict1:
for name in item['Attributes']:
if 'name1' in name:
if name.split(".")[1] not '90':
item['Attributes'].remove(name)
但是,我发现它并没有删除其中所有缺少的.90
的值。我尝试了一些列表理解,但没有帮助。我是python和编码方面的新手,所以我敢肯定有一种更简单的方法可以做到这一点。
答案 0 :(得分:2)
name.split(".")[1] not '90'
是语法错误,只需使用!=
。 Python不仅是由not
,is
,reduce
,lambda
... item['Attributes'].remove(name)
。容易出错:您可以跳过一些元素最好的方法是在列表理解中重建字典列表,并在字典理解中重建每个字典的过滤器:
Dict1 = [{'Title': 'Title1', 'Attributes':['name1.50', 'name2.40', 'name1.90']}, {'Title': 'Title2', 'Attributes':['name2.90', 'name1.40', 'name1.90']}]
new_dict_list = [{'Title':d['Title'], 'Attributes':[v for v in d['Attributes'] if v.endswith(".90")]} for d in Dict1]
结果:
[{'Attributes': ['name1.90'], 'Title': 'Title1'},
{'Attributes': ['name2.90', 'name1.90'], 'Title': 'Title2'}]
少一些理解:
new_dict_list = []
for d in Dict1:
values = [v for v in d['Attributes'] if v.endswith(".90")]
new_dict_list.append({'Title':d['Title'], 'Attributes':values})
v.endswith(".90")
可以是90 in v
或not v.startswith('name1') and v.endswith('.90')
,不确定确切的条件,但我会让读者了解。
答案 1 :(得分:0)
def solve():
array = [{'Title': 'Title1', 'Attributes':['name1.50', 'name2.40', 'name1.90']}, {'Title': 'Title2', 'Attributes':['name2.90', 'name1.40', 'name1.90']}]
for item in array:
new_names = []
for name in item['Attributes']:
if '90' in name: new_names.append(name)
elif 'name1' not in name: new_names.append(name)
item['Attributes'] = new_names
print(array)
solve()
输出:[{'Title': 'Title1', 'Attributes': ['name2.40', 'name1.90']}, {'Title': 'Title2', 'Attributes': ['name2.90', 'name1.90']}]
答案 2 :(得分:0)
您非常接近正确的答案。在Python中,你不能在一个键/值对操纵值。所以不是,我试过这种方法,这将产生你想要的输出。
for x in Dict1:
new_attributes = []
print(x)
for i in x['Attributes']:
if i.split('.')[1] == '90':
new_attributes.append(i)
del x['Attributes'] #Not required. Can directly write the new list in the key
x['Attributes'] = new_attributes
这将创建一个新的列表只存储所需的值,删除旧的Attributes
键,并创建一个新的包含新的列表。