Python 在没有上下文信息的情况下从元组访问对象的值
我有一个ID列表(IDList),它是元组列表的子集,包含这些ID和字符串格式的相关ID。可以有一个相关ID的元组,例如(1694,'1743')、两个相关ID 以逗号分隔的ID,例如(3252,'32533254')或无相关ID('none') 我想将与IDList中的id相关的tupel中的所有id写入一个公共列表(final_list)。因此,包含两个ID的元素应该用逗号分隔,包含“none”的元素应该删除 这就是我的代码现在的样子:Python 在没有上下文信息的情况下从元组访问对象的值,python,types,type-conversion,tostring,hana,Python,Types,Type Conversion,Tostring,Hana,我有一个ID列表(IDList),它是元组列表的子集,包含这些ID和字符串格式的相关ID。可以有一个相关ID的元组,例如(1694,'1743')、两个相关ID 以逗号分隔的ID,例如(3252,'32533254')或无相关ID('none') 我想将与IDList中的id相关的tupel中的所有id写入一个公共列表(final_list)。因此,包含两个ID的元素应该用逗号分隔,包含“none”的元素应该删除 这就是我的代码现在的样子: IDList = [1694, 3252, 2779]
IDList = [1694, 3252, 2779]
related = [(1694, '1743'), (3252, '3253,3254'), (3253, '3252,3254'), (3254, '3252,3253'), (1743, '1694'), (2779, 'none'), (3251, 'none'), (1677, 'none'), (1676, 'none'), (1678, '1679'), (1679, '1678')]
final_list = []
related_frame = pd.DataFrame(related)
print(related_frame)
for n in l:
dset = related_frame.loc[related_frame[0] == n]
print (dset)
rel_set = dset[1]
rel_set = str(rel_set)
if "," in rel_set:
rel_set = rel_set.split(',')
print(rel_set)
if "none" in rel_set:
rel_set = []
final_list.append(rel_set)
print(final_list)
在数据帧格式中,它看起来仍然与预期的一样:
print(related_frame)
输出:
然而,一旦我开始只处理相关的值,Python出于某种原因会将有关类型的信息添加到值中
因此,最终的_列表如下所示:
print(final_list)
[['0 1743\nName: 1', ' dtype: object'], ['1 3253', '3254\nName: 1', ' dtype: object']]
我想这样做:
print(final_list)
[1743, 3253, 3254]
是否有人知道如何在没有名称和数据类型信息等的情况下从元组中的对象访问值。?所以我只想读普通值。相关列表中的数据是从SAP HANA数据库中的varchar列获得的,因此这些对象无论如何都不是非常特殊的对象
我知道我可以使用
str.replace("\nName: 1', ' dtype: object", "")
但是没有更方便的方法吗?在这种情况下,最终的_列表也会是这样的(我更喜欢如上所述):
您可以结合使用正则表达式和列表理解
import re
final_list = [['0 1743\nName: 1', ' dtype: object'], ['1 3253', '3254\nName: 1', ' dtype: object']]
print([int(i) for sublist in [re.findall(r'(?<!Name: )(\d+)(?=$|\n)', i) for sublist in final_list for i in sublist] for i in sublist])
谢谢你的建议。然而,我想知道是否真的没有办法简单地访问对象的普通值(如在dataframe“related_frame”中,只显示普通值)。您的解决方案是可行的,但似乎要做一件看似简单的事情需要付出很多努力。如果没有其他人想出一个更方便的方法,例如一种方法,那么我会接受这个明确的答案。
[['0 1743'], ['1 3253', '3254']]
import re
final_list = [['0 1743\nName: 1', ' dtype: object'], ['1 3253', '3254\nName: 1', ' dtype: object']]
print([int(i) for sublist in [re.findall(r'(?<!Name: )(\d+)(?=$|\n)', i) for sublist in final_list for i in sublist] for i in sublist])
[1743, 3253, 3254]