繁体   English   中英

Python使用极其复杂的逻辑访问元组和更改的元素

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM