[英]Partition list of tuples based on a value within each tuple
我正在嘗試將一組數據分類為 2 個單獨的列表,全職和兼職。 但它似乎不起作用。 有人可以指出我哪里出錯了嗎?
data = [(['Andrew'], ['FullTime'], [38]),
(['Fred'], ['PartTime'], [24]),
(['Chris'], ['FullTime'], [38])]
def sort(var1, datadump):
positionlist = []
for b in range(0, len(datadump)):
temp2 = datadump[b][1]
if (temp2 == var1):
positionlist.append(datadump[b])
return (positionlist)
FullTimeList = sort("FullTime", data)
PartTimeList = sort("PartTime", data)
print(FullTimeList)
print(PartTimeList)
這是通過改變解決的
if (temp2 == var1):
到
if (temp2[0] == var1):
這是因為每個元組中的元素是包含字符串的列表,而不是字符串本身。
這個問題也可以使用兩個列表推導式來解決:
FullTimeList = [x for x in data if x[1][0] == 'FullTime']
PartTimeList = [x for x in data if x[1][0] == 'PartTime']
不是答案:只是建議。 了解如何使用 python 調試器。
python -m pdb <pythonscript.py>
在本例中,在第 9 行設置斷點
b 9
運行程序
c
當它壞了,看看temp2
p temp2
它告訴你
['FullTime']
看var1
p var1
它告訴你
'FullTime'
這就是你的問題。
如果您使用描述性名稱命名變量和函數,您將獲得更好的理解:
data = [(['Andrew'], ['FullTime'], [38]),
(['Fred'], ['PartTime'], [24]),
(['Chris'], ['FullTime'], [38])]
def filter_records(value, records):
result = []
for i in range(len(records)): # i and j are usual variable names for indices (b is not)
record = records[i]
name, work, hours = record # give names to the parts
if work[0] == value: # work[0] since the values are lists (no need for parenthesis)
result.append(record)
return result # no need for parenthesis
FullTimeList = filter_records("FullTime", data)
PartTimeList = filter_records("PartTime", data)
模式:
for i in range(len(records)):
record = records[i]
是 Python 中的一種反模式——這意味着有更好的方法來編寫它:
for record in records:
...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.