[英]Python accessing tuple and changed element with extremely complex logic
我知道python元组是不可变的,但是我需要它以任何方式更改某些元素!
这是我的元组列表。
x = [
('a', '2k'),
('t', '664'),
('hg', '4f'),
('m', '6'),
('b', 'ad'),
('t', '664'),
('a', '2k'),
('m', '6')
]
我想当列表的任何元素与元组的第一个元素匹配时,则其第二个元素应更改为ok
字符串
例如,列表:
ok = ['hg', 'm']
如果元组列表中存在ok
列表的任何元素,则该元组的第一个2nd元素应替换为“ ok”
and most important thing is, then index position shouldn't be changed
我期望下面的输出:
output = [
('a', '2k'),
('t', '664'),
('hg', 'ok'),
('m', 'ok'),
('b', 'ad'),
('t', '664'),
('a', '2k'),
('m', 'ok')
]
您不能更新元组,但是可以更新列表的元素。 使用列表理解和检查,如果每个元组的第二个元素是在列表中ok
如下:
x = [
('a', '2k'),
('t', '664'),
('hg', '4f'),
('m', '6'),
('b', 'ad'),
('t', '664'),
('a', '2k'),
('m', '6')
]
ok = ['hg', 'm']
output = [(a, 'ok' if a in ok else b) for a, b in x]
您只需要一个简单的列表理解即可:
new_list = [(a, "ok") if a in ok else (a, b) for (a, b) in x]
您可以这样做:
output = [(key, 'ok' if key in ok else value) for key, value in x]
输出量
[('a', '2k'), ('t', '664'), ('hg', 'ok'), ('m', 'ok'), ('b', 'ad'), ('t', '664'), ('a', '2k'), ('m', 'ok')]
作为更长的ok
列表的替代方法,您可以使用dict.get :
ok = ['hg', 'm']
lookup = { key : 'ok' for key in ok }
output = [(key, lookup.get(key, value)) for key, value in x]
输出量
[('a', '2k'), ('t', '664'), ('hg', 'ok'), ('m', 'ok'), ('b', 'ad'), ('t', '664'), ('a', '2k'), ('m', 'ok')]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.