【问题标题】:How to change some the values of a list of tuples?如何更改元组列表的某些值?
【发布时间】:2017-05-02 15:53:30
【问题描述】:

我有以下元组列表:

lis = [('The', 'DET'),
 ('iphone', 'X'),
 ('is', 'VERB'),
 ('a', 'DET'),
 ('very', 'ADV'),
 ('nice', 'ADJ'),
 ('device', 'NOUN'),
 ('.', 'PUNCT'),
 ('However', 'ADP'),
 ('the', 'DET'),
 ('pixel', 'X'),
 ('is', 'VERB'),
 ('by', 'ADP'),
 ('far', 'ADV'),
 ('more', 'ADV'),
 ('interesting', 'ADJ'),
 ('since', 'ADV'),
 ('it', 'PRON'),
 ('was', 'AUX'),
 ('made', 'VERB'),
 ('by', 'ADP'),
 ('google', 'NOUN'),
 ('.', 'PUNCT')]

我的主要目标是专门更改以下元组的值:('iphone', 'X'), ('pixel', 'X'), ('google', 'NOUN')('iphone', 'device'), ('pixel', 'device'), ('google', 'entity')。因此,由于我对保留订单感兴趣,因此我尝试了以下操作:

tags['Google'] = 'device'
tags['pixel'] = 'device'
tags['iphone'] = 'entity'
#this one is not present in lis . Nevertheless, I would like to add it just in case I need it.
tags['galaxy'] = 'device'
tags = list(tags.items())
tags = OrderedDict(postag(str(sample)))

由于我添加了tags['galaxy'] = 'device',它实际上将它添加到列表的末尾作为('galaxy', 'device')。因此,我的问题是如何修复和更新元组的值(如果存在)?

【问题讨论】:

  • 是否需要使用元组列表?元组是不可变的,因此如果我知道它们可能/将要更改,我不会使用它们。例如,也许您可​​以使用字典来存储映射,或者使用单独的列表来保持键的顺序?
  • @MxyL 不幸的是,元组是必要的......我也知道你的想法。

标签: python list python-3.x tuples list-comprehension


【解决方案1】:

使用列表推导重建列表

tags = {'google': 'entity', 'iphone': 'device', ...}

lis = [(a, tags[a.lower()]) if a.lower() in tags else (a, b) for a, b in lis]

这将覆盖像('iphone', 'something') 这样的元组,也就是说它不关心第二个变量中的内容。

【讨论】:

  • 如果它们在我的文本中不存在怎么办?理解列表是否足够强大来处理这个问题而不是添加它们?
  • 此列表理解不会将不存在的值放入lis。一些关于列表理解的阅读:docs.python.org/3/tutorial/…
  • 你的lis 中有一些不是(a, b) 2-ple
  • 对不起,我混淆了一些名称。这个效果很好。
【解决方案2】:

如果您需要更改这个地方并且已经有了您需要替换它们的值,我只需从替换字段中创建一个字典然后替换:

rep = dict([('iphone', 'device'), ('pixel', 'device'), ('google', 'entity')])

for ind, (i, j) in enumerate(lis):
    if i in rep:
        lis[ind] = (i, rep[i])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-12
    • 1970-01-01
    • 2019-09-17
    • 1970-01-01
    • 1970-01-01
    • 2016-02-23
    • 1970-01-01
    • 2021-09-02
    相关资源
    最近更新 更多