将列表中的列表更改为字符串-python
我使用列表理解创建了一个列表,我想知道如何将列表中的列表更改为字符串 这是我的代码:将列表中的列表更改为字符串-python,python,list-comprehension,Python,List Comprehension,我使用列表理解创建了一个列表,我想知道如何将列表中的列表更改为字符串 这是我的代码: limit = 1000 searchPage = 0 tagId = 493 table = 'ContactGroupAssign' selectedFields = ['Contact.Id', 'DateCreated', 'Contact.OwnerID', 'Contact.Groups'] queryDataUnknown = {'GroupId': tagId, 'DateCreated': "
limit = 1000
searchPage = 0
tagId = 493
table = 'ContactGroupAssign'
selectedFields = ['Contact.Id', 'DateCreated', 'Contact.OwnerID', 'Contact.Groups']
queryDataUnknown = {'GroupId': tagId, 'DateCreated': "~>=~" + str(twoyearsago)}
tagsDic = {'Unknown': ',10738',
'Cant Afford': ',10712',
'Doesnt Want To Pay': ',10714',
'No 3rd Party': ',10716',
'No Longer Qualifies': ',10718',
'Scam': ',10720',
'No Contact': ',10734',
'Collections - Non Payment': ',7878',
'Billing Cancellation': ',10748',
'NBDK': ',8744',
'Within 5 Days: Cant Afford CTF': ',10744',
'Within 5 Days: Changed Mind/Persuaded': ',10746'}
allcancelledmembers = []
while True:
queryResults = infusionsoft.DataService('query', table, limit, searchPage, queryDataUnknown, selectedFields)
allcancelledmembers += queryResults
searchPage += 1
if len(queryResults) < 1000:
break
lc_allcancelmembers = [[record.get("Contact.Id"), convert_is_datetime(str(record.get("DateCreated"))), record.get("Contact.OwnerID"), record.get("Contact.Groups"), [k for k, v in tagsDic.items() if v in (record.get("Contact.Groups"))]] for record in allcancelledmembers]
这是我想要的结果:
[68505, datetime.datetime(2019, 1, 9, 9, 10, 52), 384114, '130,134,136,138,152,206,208,286,290,312,436,493,495,728,760,772,774,788,952,968,1088,1226,1254,2362,2584,2598,2972,2974,3102,3560,4552,4554,5430,6566,6950,7226,8156,8160,8412,8418,8672,8744,9179,9273,10738', 'Unknown','NBDK']
新结果中唯一的区别是只将每条记录的最后一项从['Unknown','NBDK']更改为'Unknown','NBDK'
有没有办法通过修改我代码中的这一行来做到这一点:
lc_allcancelmembers = [[record.get("Contact.Id"), convert_is_datetime(str(record.get("DateCreated"))), record.get("Contact.OwnerID"), record.get("Contact.Groups"), [k for k, v in tagsDic.items() if v in (record.get("Contact.Groups"))]] for record in allcancelledmembers]
如果没有,实现这一目标的最佳方式是什么
谢谢 由于我不认识您正在使用的模块,因此这有点不规范。但仍然有效
import datetime
def cleanContacts(A):
return A[:-1] + A[-1]
A = [68505, datetime.datetime(2019, 1, 9, 9, 10, 52), 384114, '130,134,136,138,152,206,208,286,290,312,436,493,495,728,760,772,774,788,952,968,1088,1226,1254,2362,2584,2598,2972,2974,3102,3560,4552,4554,5430,6566,6950,7226,8156,8160,8412,8418,8672,8744,9179,9273,10738', ['Unknown', 'NBDK']]
C = [68505, datetime.datetime(2019, 1, 9, 9, 10, 52), 384114, '130,134,136,138,152,206,208,286,290,312,436,493,495,728,760,772,774,788,952,968,1088,1226,1254,2362,2584,2598,2972,2974,3102,3560,4552,4554,5430,6566,6950,7226,8156,8160,8412,8418,8672,8744,9179,9273,10738', 'Unknown','NBDK']
assert cleanContacts(A) == C
另外,如果我正确地猜测要弹出打开的元素来自最后一个列表理解,那么这颗星将起作用
lc_allcancelmembers = [[record.get("Contact.Id"), convert_is_datetime(str(record.get("DateCreated"))), record.get("Contact.OwnerID"), record.get("Contact.Groups"), *[k for k, v in tagsDic.items() if v in (record.get("Contact.Groups"))]] for record in allcancelledmembers]
您可以创建一个通用(递归)函数来展平嵌套列表,如下图所示,并使用它展平您得到的列表
def flatten_list(lst):
for member in lst:
if isinstance(member, list):
for mem in flatten_list(member):
yield mem
else:
yield member
if __name__ == '__main__':
import datetime
lst = [68505, datetime.datetime(2019, 1, 9, 9, 10, 52), 384114, '130,134,136,138,152,206,208,286,290,312,436,493,495,728,760,772,774,788,952,968,1088,1226,1254,2362,2584,2598,2972,2974,3102,3560,4552,4554,5430,6566,6950,7226,8156,8160,8412,8418,8672,8744,9179,9273,10738', ['Unknown', 'NBDK']]
print(list(flatten_list(lst)))
给出:
[68505, datetime.datetime(2019, 1, 9, 9, 10, 52), 384114, '130,134,136,138,152,206,208,286,290,312,436,493,495,728,760,772,774,788,952,968,1088,1226,1254,2362,2584,2598,2972,2974,3102,3560,4552,4554,5430,6566,6950,7226,8156,8160,8412,8418,8672,8744,9179,9273,10738', 'Unknown', 'NBDK']
谢谢你@JimmyCarlos!并非每个记录都有两个值,如['Unknown','NBDK']。如果最后一项有两个值,有没有办法只获取最后一项?这样::[k代表k,v在tagsDic.items()中,如果v在(record.get(“Contact.Groups”)][-1]]中,这给了我一个列表索引超出范围的错误,所以我只是想知道这是否可能。如果您只想要最后一个值,您可以像[k代表k,v在tagsDic.items()中,如果v在(record.get(“Contact.Groups”)][-1]中一样,不需要*作为[-1]已断开列表以获取最后一个元素。这将导致列表索引超出范围错误。我尝试了[k代表k,v在tagsDic.items()中,如果v在(record.get(“Contact.Groups”)][-1]]中代表所有取消成员中的record]。去掉最后一个方括号,我会看到未解决的引用错误,最好开始把它分成两行。将主要内容放在第1行,然后在第二行做列表+=[k代表k,v….],将两个列表连接在一起。
def flatten_list(lst):
for member in lst:
if isinstance(member, list):
for mem in flatten_list(member):
yield mem
else:
yield member
if __name__ == '__main__':
import datetime
lst = [68505, datetime.datetime(2019, 1, 9, 9, 10, 52), 384114, '130,134,136,138,152,206,208,286,290,312,436,493,495,728,760,772,774,788,952,968,1088,1226,1254,2362,2584,2598,2972,2974,3102,3560,4552,4554,5430,6566,6950,7226,8156,8160,8412,8418,8672,8744,9179,9273,10738', ['Unknown', 'NBDK']]
print(list(flatten_list(lst)))
[68505, datetime.datetime(2019, 1, 9, 9, 10, 52), 384114, '130,134,136,138,152,206,208,286,290,312,436,493,495,728,760,772,774,788,952,968,1088,1226,1254,2362,2584,2598,2972,2974,3102,3560,4552,4554,5430,6566,6950,7226,8156,8160,8412,8418,8672,8744,9179,9273,10738', 'Unknown', 'NBDK']