从python中的列表返回元素

时间:2015-03-20 06:14:22

标签: python python-2.7

假设我有一个名为的列表 a =['apple' 'anachi', 'butter' 'bread', 'cat' , 'catre']

我需要按如下方式返回元素:

a['a']应该返回[apple, anachi]
 a['b']应该返回['butter', 'bread']

我如何在python中执行此操作

4 个答案:

答案 0 :(得分:4)

如果您只想通过第一个字符访问您的姓名列表a,请注意,它不再是一个列表,我会为您提供以下解决方案:

>>> from collections import defaultdict
>>> a =['apple', 'anachi', 'butter', 'bread', 'cat' , 'catre']
>>> d=defaultdict(list)
>>> for s in a:
    d[s[0]].append(s)


>>> a=d
>>> a['a']
['apple', 'anachi']
>>> a['b']
['butter', 'bread']

答案 1 :(得分:1)

你有很多选择。

首先,请注意目前列表的行为:

a =['apple' 'anachi', 'butter' 'bread', 'cat' , 'catre']
print a[0]  # appleanachi
print a[1]  # butterbread

由于你在“苹果”和“anachi”,“黄油”和“面包”之间缺少逗号,因此它们会被连接起来。我不确定那是你想要的。

如果您更正为了使其成为“平面”列表,您可以使用切片语法从列表中提取元素,但是您需要知道索引才能执行此操作:

a = ['apple', 'anachi', 'butter', 'bread', 'cat' , 'catre']
print a[0:2]  # ['apple', 'anachi']
print a[2:4]  # ['butter', 'bread']

或者,您可以使用嵌套列表,然后您不需要切片语法,只需要“对”的单个索引:

a = [['apple', 'anachi'], ['butter', 'bread'], ['cat' , 'catre']]
print a[0]  # ['apple', 'anachi']
print a[1]  # ['butter', 'bread']

到目前为止,所有这些方法都要求您知道索引,但如果您不,并且您想要从列表中提取具有特定前缀/以某个字母开头的元素组合,你可以做类似的事情:

def search(lst, pre):
    return [e for e in lst if e.startswith(pre)]

a = ['apple', 'anachi', 'butter', 'bread', 'cat' , 'catre']
print search(a, 'a')  # ['apple', 'anachi']
print search(a, 'b')  # ['butter', 'bread']

这种搜索方法也可以用于嵌套列表,例如,如果你想找到所有“对”,其中对的第一项以给定的前缀开头:

def search(lst, pre):
    return [p for p in lst if p[0].startswith(pre)]

a = [['apple', 'anachi'], ['butter', 'bread'], ['cat' , 'catre']]
print search(a, 'a')  # [['apple', 'anachi']]
print search(a, 'b')  # [['butter', 'bread']]

答案 2 :(得分:0)

我要做的是实现自定义序列:

from collections import Sequence

class MyList(Sequence):

    def __init__(self, data=()):
        super(MyList, self).__init__()
        self._list = list(data)

    def __getitem__(self, key):
        if type(key) == int:
            return self._list[key]
        return [e for e in self._list if e.startswith(key)]

    def __len__(self):
        return len(self._list)


a = MyList(['apple', 'anachi', 'butter', 'bread', 'cat' , 'catre'])

print a['a']  # prints ['apple', 'anachi']
print a['b']  # prints ['butter', 'bread']
print a['ca']  # prints ['cat' , 'catre']

此处关键部分是自定义__getitem__,我们不是简单地从基础列表self._list返回项目,而是从self._list返回一个新的项目列表,给予关键。

请注意,上面的代码没有错误处理(例如,您需要检查元素是否只是字符串才能使用)。

答案 3 :(得分:0)

使用itertools.groupby

>>> my_dict = {}
>>> for x,y in itertools.groupby(a, key=lambda x:x[0]):
...     my_dict[x] = my_dict.get(x,[]) + list(y)
...
>>> my_dict['a']
['apple', 'anachi']
>>> my_dict['b']
['butter', 'bread']
>>> my_dict['c']
['cat', 'catre']