从字典中删除嵌套值列表中的特定值

时间:2019-01-15 01:57:09

标签: python

目前,我有字典:

d = {'m1': [None, ['w3', 'w2', 'w1']], 'm2': [None, ['w3', 'w1', 'w2']], 'm3': [None, ['w2', 'w1', 'w3']]}

经过格式化,看起来像这样(为了便于阅读):

m1 -> [None, ['w3', 'w2', 'w1']]
m2 -> [None, ['w3', 'w1', 'w2']]
m3 -> [None, ['w2', 'w1', 'w3']]

还有

to_match = 'm2'

to_match 是一个字符串,并且如果与字典 d 中的键匹配,它将用该列表中的第一项替换None,然后将其从清单。我很困惑如何进行此操作。

例如...

因此,由于 to_match 'm2',它将查找键m2,将“无”替换为列表中的第一项,并将其自身从列表中删除。看起来像这样:

之前:

'm2': [None, ['w3', 'w1', 'w2']]

“ m2”的外观如下:

'm2': ['w3', ['w1', 'w2']]

还有整个字典:

d = {'m1': [None, ['w3', 'w2', 'w1']], 'm2': ['w3', ['w1', 'w2']], 'm3': [None, ['w2', 'w1', 'w3']]}

如何将整个字典更改为这样?

当前代码:

d = {'m1': [None, ['w3', 'w2', 'w1']], 'm2': [None, ['w3', 'w1', 'w2']], 'm3': [None, ['w2', 'w1', 'w3']]}

to_match = 'm2'

def replace(d: dictionary, to_match):
   for key, value in d.items():
       if to_match in key:



   return 



replace(d, to_match)

2 个答案:

答案 0 :(得分:3)

以下这段代码将帮助您。 您无需在键上运行for循环,因为python词典就像哈希表一样,键被哈希以匹配值。

def replace(d, to_match):
    if to_match in d:
        d[to_match][0] = d[to_match][1].pop(0)
    return

我不知道您的其他要求,但这应该可以满足您的需求

答案 1 :(得分:1)

对错误的恢复能力不是很强,但是:

d = {'m1': [None, ['w3', 'w2', 'w1']], 'm2': [None, ['w3', 'w1', 'w2']], 'm3': [None, ['w2', 'w1', 'w3']]}

to_match = 'm2'

def replace(d, to_match):
    value_list = d.get(to_match)
    if value_list is not None:
        # assuming your values are always lists of 2
        head, remainder = value_list
        if remainder:
            new_value_list = [remainder[0], remainder[1:]]
        else:
            # just guessing? really depends on what your requirements are...
            new_value_list = [None, []]
        d[to_match] = new_value_list
        return head


replace(d, to_match)
print(d)