目前,我有字典:
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)
答案 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)