如何按Python中的元素对列表进行分类

时间:2017-10-25 22:33:52

标签: python list dictionary

说我有一个清单:

['1,2,3', '1,2,3', '1,3,2', '2,1,3', '2,3,1']

如何根据项目中特定数字的位置将项目分类为字典的特定键?如果1是第一个数字,则应将该项添加到第一个键的值中,如果它是第二个键,则应将其添加到第二个键的值中。

所以,如果我有一个带有键A,B,C的字典:

{'A': [], 'B': [], 'C': []}

生成的字典应如下所示:

{'A': ['1,2,3', '1,2,3', '1,3,2'], 'B': ['2,1,3'], 'C':['2,3,1']

目前我有以下代码:

lst = ['1,2,3', '1,2,3', '1,3,2', '2,1,3', '2,3,1']
dict = {'A': [], 'B': [], 'C': []}
for item in list
    item.strip(',')
    if item[0] == 1:
       dict['A'].append(item)
    elif item[1] == 1:
       dict['B'].append(item)
    elif item[2] == 1:
       dict['C'].append(item)
print(dict)

但是,这只会返回原始字典。

3 个答案:

答案 0 :(得分:1)

试试这个:

lst = ['1,2,3', '1,2,3', '1,3,2', '2,1,3', '2,3,1']
dict = {'A': [], 'B': [], 'C': []}
for item in lst:
   l = item.replace(',', '')
   if l[0] == '1':
      dict['A'].append(item)
   elif l[1] == '1':
      dict['B'].append(item)
   elif l[2] == '1':
      dict['C'].append(item)
print(dict)

我希望这有帮助!

答案 1 :(得分:0)

我认为您打算使用item.split(',')而不是item.strip(','),它只删除字符串item开头和结尾的逗号。 item.split(',')使用逗号作为分隔符将字符串item拆分为一个列表。此外,您需要保存方法调用的结果,上述方法调用都不会修改字符串。

您可能想要做的事情是:

lst = ['1,2,3', '1,2,3', '1,3,2', '2,1,3', '2,3,1']
dict = {'A': [], 'B': [], 'C': []}

for item in lst:
    item_arr = item.split(',')
    key = 'ABC'[item_arr.index('1')]
    dict[key].append(item)

print(dict)

答案 2 :(得分:0)

效率较低且不太可读,但这里是使用字典和列表推理的单线:

lst = ['1,2,3', '1,2,3', '1,3,2', '2,1,3', '2,3,1']
keys = ['A', 'B', 'C']
dic = {key: [x for x in lst if x.split(',')[j] == '1'] for j, key in enumerate(keys)}
# {'A': ['1,2,3', '1,2,3', '1,3,2'], 'B': ['2,1,3'], 'C': ['2,3,1']}