Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python中元组的多字符串替换_Python - Fatal编程技术网

Python中元组的多字符串替换

Python中元组的多字符串替换,python,Python,我想用替换集替换元组中的多个字符串元素 from itertools import chain old = [('Jack','Mike'),('Rosa','Mike'),('Pete','Jake'),('Beth','Jake')] uniquelist = list(dict.fromkeys([ i for i in chain(*old)])) replaceset = [("a" + str(new),old) for new,old in enumerate(uniquelis

我想用替换集替换元组中的多个字符串元素

from itertools import chain

old = [('Jack','Mike'),('Rosa','Mike'),('Pete','Jake'),('Beth','Jake')]
uniquelist = list(dict.fromkeys([ i for i in chain(*old)]))
replaceset = [("a" + str(new),old) for new,old in enumerate(uniquelist)]
replaceset
是:

[('a0', 'Jack'), ('a1', 'Mike'), ('a2', 'Rosa'), ('a3', 'Pete'), ('a4', 'Jake'), ('a5', 'Beth')]
这是我想要从
old
获得的输出

[('a0','a1'),('a2','a1'),('a3','a4'),('a5','a4')]


有什么办法解决这个问题吗?

我在这里假设您使用的是Python 3.7+,维护秩序对您很重要。

只需将
replaceset
转换为dict,然后用列表重新创建
old

from itertools import chain

old = [('Jack','Mike'),('Rosa','Mike'),('Pete','Jake'),('Beth','Jake')]
uniquelist = list(dict.fromkeys([ i for i in chain(*old)]))
#replaceset = [("a" + str(new),old) for new,old in enumerate(uniquelist)]
replaceset = {old:"a" + str(new) for new, old in enumerate(uniquelist)}

res = [tuple(replaceset[name] for name in sub) for sub in old]
print(res)  # [('a0', 'a1'), ('a2', 'a1'), ('a3', 'a4'), ('a5', 'a4')]

作为旁注

uniquelist = dict.fromkeys(chain(*old))

也会使您更高效。

我在这里假设您使用的是Python 3.7+,维护秩序对您很重要。

只需将
replaceset
转换为dict,然后用列表重新创建
old

from itertools import chain

old = [('Jack','Mike'),('Rosa','Mike'),('Pete','Jake'),('Beth','Jake')]
uniquelist = list(dict.fromkeys([ i for i in chain(*old)]))
#replaceset = [("a" + str(new),old) for new,old in enumerate(uniquelist)]
replaceset = {old:"a" + str(new) for new, old in enumerate(uniquelist)}

res = [tuple(replaceset[name] for name in sub) for sub in old]
print(res)  # [('a0', 'a1'), ('a2', 'a1'), ('a3', 'a4'), ('a5', 'a4')]

作为旁注

uniquelist = dict.fromkeys(chain(*old))

也会起作用,使您的效率更高。

如果您将replaceset设置为dict,这将是微不足道的。如果您将replaceset设置为dict,这将是微不足道的。酷!谢谢你让我知道这样的方式:“也不要使用<代码> DICT.OFFICKEX/CODE >,考虑使用<代码> SET(链(*HOLD))< /COD>(或<代码> FROZESETSE< /COD>),更好地表达意图。<代码> [我在In链(*HOLD)] 看起来是WiRD。链(*old)不起作用吗?无论如何,最好做
list(chain(*old))
@OliverW。对于
set
它不起作用,因为集合不保留插入顺序。我相信OP希望在重复检测的基础上增加插入顺序。@Jean-franoisfabre
chain(*old)
确实有效;见旁注。但是,我们不能在这里使用
list
,因为这无法消除重复的值,
dict
调用稍后将覆盖它们。酷!谢谢你让我知道这样的方式:“也不要使用<代码> DICT.OFFICKEX/CODE >,考虑使用<代码> SET(链(*HOLD))< /COD>(或<代码> FROZESETSE< /COD>),更好地表达意图。<代码> [我在In链(*HOLD)] 看起来是WiRD。链(*old)不起作用吗?无论如何,最好做
list(chain(*old))
@OliverW。对于
set
它不起作用,因为集合不保留插入顺序。我相信OP希望在重复检测的基础上增加插入顺序。@Jean-franoisfabre
chain(*old)
确实有效;见旁注。但是,我们不能在这里使用
list
,因为这无法消除重复的值,
dict
调用稍后将覆盖它们。