如何在列表中附加多个字符串值(如果存在于列表中)
How to append multiple string values (if exist in a list) in a list
我有一个列表 'lst1' 并且想在一行中附加多个值(如果存在)。谁能帮我解决这个问题。
lst1 = [['cnl','fb123','ins54'],['ins45'],['abc','xyz'],['abc','xyz','fb765','ins567']]
adn = ['ab','cc']
fb = []
ins = []
otr = []
for lnk in lst1:
for lnk2 in lnk:
if 'fb' in lnk2:
try:
fb.append(lnk2)
except:
fb.append("")
elif 'ins' in lnk2:
try:
ins.append(lnk2)
except:
ins.append("")
elif ('fb' or 'ins') not in lnk2:
try:
otr.append(lnk2)
except:
otr.append("")
data = {}
data = {'fb': fb, 'ins': ins, 'otr': otr, 'adn': adn}
result = pd.DataFrame(dict([(k,pd.Series(v)) for k,v in data.items()]))
result.to_csv("raw_data.csv", index = False)
预期输出:
fb ins otr adn
0 fb123 ins54 cnl ab
1 ins45 cc
2 abc,xyz
3 fb765 ins567 abc,xyz
甚至,我尝试使用 'extend' 函数,但无法获得所需的输出。
我不明白为什么在输出示例中第三行和第四行是空的?为什么 'abc, xyz' 在第二行?
仅根据描述实施。如果你想排除重复,你可以另外转换 *_check
列表来设置 .
import pandas as pd
lst1 = [['cnl', 'fb123', 'ins54'], ['ins45'], ['abc', 'xyz'], ['abc', 'xyz', 'fb765', 'ins567']]
adn = ['ab', 'cc']
fb = []
ins = []
otr = []
for lnk in lst1:
fb_check = [word for word in lnk if word.startswith('fb')]
ins_check = [word for word in lnk if word.startswith('ins')]
otr_check = [word for word in lnk if not word.startswith('fb') and not word.startswith('ins')]
fb.append(','.join(fb_check) if fb_check else '')
ins.append(','.join(ins_check) if ins_check else '')
otr.append(','.join(otr_check) if otr_check else '')
while len(adn) != len(fb):
adn.append('')
data = {'fb': fb, 'ins': ins, 'otr': otr, 'adn': adn}
result = pd.DataFrame(dict([(k, pd.Series(v)) for k, v in data.items()]))
print(result)
result.to_csv("raw_data.csv", index=False)
输出:
fb ins otr adn
0 fb123 ins54 cnl ab
1 ins45 cc
2 abc,xyz
3 fb765 ins567 abc,xyz
我有一个列表 'lst1' 并且想在一行中附加多个值(如果存在)。谁能帮我解决这个问题。
lst1 = [['cnl','fb123','ins54'],['ins45'],['abc','xyz'],['abc','xyz','fb765','ins567']]
adn = ['ab','cc']
fb = []
ins = []
otr = []
for lnk in lst1:
for lnk2 in lnk:
if 'fb' in lnk2:
try:
fb.append(lnk2)
except:
fb.append("")
elif 'ins' in lnk2:
try:
ins.append(lnk2)
except:
ins.append("")
elif ('fb' or 'ins') not in lnk2:
try:
otr.append(lnk2)
except:
otr.append("")
data = {}
data = {'fb': fb, 'ins': ins, 'otr': otr, 'adn': adn}
result = pd.DataFrame(dict([(k,pd.Series(v)) for k,v in data.items()]))
result.to_csv("raw_data.csv", index = False)
预期输出:
fb ins otr adn
0 fb123 ins54 cnl ab
1 ins45 cc
2 abc,xyz
3 fb765 ins567 abc,xyz
甚至,我尝试使用 'extend' 函数,但无法获得所需的输出。
我不明白为什么在输出示例中第三行和第四行是空的?为什么 'abc, xyz' 在第二行?
仅根据描述实施。如果你想排除重复,你可以另外转换 *_check
列表来设置 .
import pandas as pd
lst1 = [['cnl', 'fb123', 'ins54'], ['ins45'], ['abc', 'xyz'], ['abc', 'xyz', 'fb765', 'ins567']]
adn = ['ab', 'cc']
fb = []
ins = []
otr = []
for lnk in lst1:
fb_check = [word for word in lnk if word.startswith('fb')]
ins_check = [word for word in lnk if word.startswith('ins')]
otr_check = [word for word in lnk if not word.startswith('fb') and not word.startswith('ins')]
fb.append(','.join(fb_check) if fb_check else '')
ins.append(','.join(ins_check) if ins_check else '')
otr.append(','.join(otr_check) if otr_check else '')
while len(adn) != len(fb):
adn.append('')
data = {'fb': fb, 'ins': ins, 'otr': otr, 'adn': adn}
result = pd.DataFrame(dict([(k, pd.Series(v)) for k, v in data.items()]))
print(result)
result.to_csv("raw_data.csv", index=False)
输出:
fb ins otr adn
0 fb123 ins54 cnl ab
1 ins45 cc
2 abc,xyz
3 fb765 ins567 abc,xyz