0

我有一个字典列表(LDICT)和一个字符串列表(LS)。我想检查以确保 LS 中的项目不是 LDICT 中任何字典中的键。如果是,我想从 LS 中删除该项目。

我已经找到了一种使用 for 循环来做到这一点的方法,但它很丑陋,我正在努力理解如何使用列表理解来实现这一点。

有关使用 for 循环的示例,请参见下面的代码:

for item in LDICT:
    for k, v in item.iteritems():
        if k in LS:
            LS.remove(k)
4

3 回答 3

3

用于any()检查每个单词LS

[k for k in LS if not any((k in t) for t in LDICT)]
于 2019-03-27T16:55:34.773 回答
1

创建所有 dicts 中的所有键的组合集,LDICT并从您的一组中减去LS

(很长的路要走)

LDICT = [ {i:"" for i in range(k,k+20,3)} for k in range(0,100,20)]

LS = [x for x in range(100) if x%4 == 0]
print(LDICT)
print(LS)

all_keys = set(x for d in LDICT for x in d)
print(all_keys)

cleaned_keys = set(LS)-all_keys
print(cleaned_keys)

输出:

# LDICT
[{0: '', 3: '', 6: '', 9: '', 12: '', 15: '', 18: ''}, 
 {20: '', 23: '', 26: '', 29: '', 32: '', 35: '', 38: ''}, 
 {40: '', 43: '', 46: '', 49: '', 52: '', 55: '', 58: ''}, 
 {60: '', 63: '', 66: '', 69: '', 72: '', 75: '', 78: ''}, 
 {80: '', 83: '', 86: '', 89: '', 92: '', 95: '', 98: ''}]

 # LS
[0, 4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 44, 48, 52, 56, 60, 64, 
 68, 72, 76, 80, 84, 88, 92, 96]

 # all_keys
 {0, 3, 6, 9, 12, 15, 18, 20, 23, 26, 29, 32, 35, 38, 40, 43, 46, 49, 52, 55, 58, 60,
  63, 66, 69, 72, 75, 78, 80, 83, 86, 89, 92, 95, 98}

 # cleaned_keys
 {64, 96, 4, 36, 68, 8, 44, 76, 16, 48, 84, 24, 56, 88, 28}

你只需要列出一个清单cleaned_keys

独库:

于 2019-03-27T16:58:11.767 回答
1
forbidden_keys = set(key for dct in LDICT for key in dct)
filtered_list = [item for item in LST if item not in forbidden_keys]
于 2019-03-27T16:53:54.613 回答