Return 包含已替换字典值的大型元组列表
Return large list of tuples with replaced dictionary value
在python中,我有一个包含患者数据的元组列表(批次),如下所示:
lot = [('490001', 'A-ARM1', '1', '2', "a", "b"),
('490001', 'A-ARM2', '3', '4', "c", "d"),
('490002', 'B-ARM3', '5', '6', "e", "f")]
在我的真实数据集中,批次由 50-150 个元组组成(取决于患者)。我循环遍历第二个元组元素,并希望用字典值替换每个 'A-' 和 'B-' 字符,因此输出将变为:
[('490001', 'ZZARM1', '1', '2', 'a', 'b'), ('490001', 'ZZARM2', '3', '4', 'c', 'd'), ('490002', 'XXARM3', '5', '6', 'e', 'f')]
为了满足这一点,我编写了以下代码。在这里,我想知道是否有一种更简洁(更短)的写法。例如,'lot2'。如上所述,该代码应该适用于大量元组列表。我渴望向你学习!
from more_itertools import grouper
dict = {'A-': 'ZZ', 'B-': 'XX'}
for el1, el2, *rest in lot:
for i, j in grouper(el2, 2):
if i + j in dict:
lot2 = [ ( tpl[0], (tpl[1].replace(tpl[1][:2], dict[tpl[1][:2]])), tpl[2], tpl[3], tpl[4], tpl[5] ) for tpl in lot]
print(lot2)
如果您正在寻找更短的代码,这里有一个未使用的更短代码 more_itertools.grouper
。基本上,迭代 lot
并随时修改第二个元素(如果需要更改)。请注意,我在这里将 dict
命名为 dct
; dict
是内置的 dict 构造函数,如果您以后碰巧想使用 dict 构造函数,则将您的变量命名为与 Python 内置函数相同的名称会产生问题。
lot2 = []
for el1, el2, *rest in lot:
prefix = el2[:2]
el2 = dct.get(prefix, prefix) + el2[2:]
lot2.append((el1, el2, *rest))
可以写得更简洁:
lot2 = [(el1, dct.get(el2[:2], el2[:2]) + el2[2:], *rest) for el1, el2, *rest in lot]
输出:
[('490001', 'ZZARM1', '1', '2', 'a', 'b'),
('490001', 'ZZARM2', '3', '4', 'c', 'd'),
('490002', 'XXARM3', '5', '6', 'e', 'f')]
在python中,我有一个包含患者数据的元组列表(批次),如下所示:
lot = [('490001', 'A-ARM1', '1', '2', "a", "b"),
('490001', 'A-ARM2', '3', '4', "c", "d"),
('490002', 'B-ARM3', '5', '6', "e", "f")]
在我的真实数据集中,批次由 50-150 个元组组成(取决于患者)。我循环遍历第二个元组元素,并希望用字典值替换每个 'A-' 和 'B-' 字符,因此输出将变为:
[('490001', 'ZZARM1', '1', '2', 'a', 'b'), ('490001', 'ZZARM2', '3', '4', 'c', 'd'), ('490002', 'XXARM3', '5', '6', 'e', 'f')]
为了满足这一点,我编写了以下代码。在这里,我想知道是否有一种更简洁(更短)的写法。例如,'lot2'。如上所述,该代码应该适用于大量元组列表。我渴望向你学习!
from more_itertools import grouper
dict = {'A-': 'ZZ', 'B-': 'XX'}
for el1, el2, *rest in lot:
for i, j in grouper(el2, 2):
if i + j in dict:
lot2 = [ ( tpl[0], (tpl[1].replace(tpl[1][:2], dict[tpl[1][:2]])), tpl[2], tpl[3], tpl[4], tpl[5] ) for tpl in lot]
print(lot2)
如果您正在寻找更短的代码,这里有一个未使用的更短代码 more_itertools.grouper
。基本上,迭代 lot
并随时修改第二个元素(如果需要更改)。请注意,我在这里将 dict
命名为 dct
; dict
是内置的 dict 构造函数,如果您以后碰巧想使用 dict 构造函数,则将您的变量命名为与 Python 内置函数相同的名称会产生问题。
lot2 = []
for el1, el2, *rest in lot:
prefix = el2[:2]
el2 = dct.get(prefix, prefix) + el2[2:]
lot2.append((el1, el2, *rest))
可以写得更简洁:
lot2 = [(el1, dct.get(el2[:2], el2[:2]) + el2[2:], *rest) for el1, el2, *rest in lot]
输出:
[('490001', 'ZZARM1', '1', '2', 'a', 'b'),
('490001', 'ZZARM2', '3', '4', 'c', 'd'),
('490002', 'XXARM3', '5', '6', 'e', 'f')]