如何使用条件从字典中提取值

2024-04-27 00:12:58 发布

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

我的字典如下,如果值以csvjson结尾,我需要放入同一字典的另一个字典中:

d = {'a': ['1.json', '1.html', '1.csv'], 'B': ['2.json', '2.html', '2.csv']}

代码如下:

d = {}
for k,v in d.items():
    for i in v:
        if i.split('.')[1] == 'csv' or i.split('.')[1] == 'json':
            d[k] = v

我的

{'a': ['1.json', '1.html', '1.csv'], 'B': ['2.json', '2.html', '2.csv']}

预料之外

{'a': ['1.json', '1.csv'], 'B': ['2.json', '2.csv']}

Tags: orcsv代码injsonforif字典
3条回答

你永远不会改变v,所以字典是不变的。您应该创建一个新列表,仅保留所需的值:

for k,v in d.items():
    v = [i for i in v if i.split('.')[1] in ('csv', 'json')]
    d[k] = v

或者更好:

d = {k: [i for i in v if i.split('.')[1] in ('csv', 'json')]
     for k,v in d.items()}

您可以尝试使用rfind查找最后一个。如果与CSV或JSON匹配,则将其添加到列表中

d = {'a': ['1.json', '1.html', '1.csv'], 'B': ['2.json', '2.html', '2.csv']}
for k, v in d.items():
  d[k] = []
  for i in v:
    if i[i.rfind(".") + 1:] in ('csv', 'json'):
        d[k].append(i)

请测试它:

from collections import defaultdict

x = defaultdict(list)
d = {'a': ['1.json', '1.html', '1.csv'], 'B': ['2.json', '2.html', '2.csv']}

for k, v in d.items():
    for i in v:
        if i.split('.')[-1] in ['csv', 'json']:
            x[k].append(i)

print(dict(x))

相关问题 更多 >