Python 它是如何工作的。是否可以让它返回一个类似于['3','4','6']的列表,而不是字典?嗨,能解释一下你的代码吗?我不太明白如何使用它来获得结果。顺便问一下,“VAL”是什么?谢谢VAL是您的输入(列表列表)。至于代码本身,请仔细阅读dict理解,您将看到

Python 它是如何工作的。是否可以让它返回一个类似于['3','4','6']的列表,而不是字典?嗨,能解释一下你的代码吗?我不太明白如何使用它来获得结果。顺便问一下,“VAL”是什么?谢谢VAL是您的输入(列表列表)。至于代码本身,请仔细阅读dict理解,您将看到,python,list,data-manipulation,Python,List,Data Manipulation,它是如何工作的。是否可以让它返回一个类似于['3','4','6']的列表,而不是字典?嗨,能解释一下你的代码吗?我不太明白如何使用它来获得结果。顺便问一下,“VAL”是什么?谢谢VAL是您的输入(列表列表)。至于代码本身,请仔细阅读dict理解,您将看到它是如何工作的。是否可以让它返回一个类似于['3','4','6']的列表,而不是字典? l = [['A', 'aa', '1', '300'], ['A', 'ab', '2', '30'], ['A', 'ac', '


它是如何工作的。是否可以让它返回一个类似于
['3','4','6']
的列表,而不是字典?嗨,能解释一下你的代码吗?我不太明白如何使用它来获得结果。顺便问一下,“VAL”是什么?谢谢<代码>VAL是您的输入(列表列表)。至于代码本身,请仔细阅读dict理解,您将看到它是如何工作的。是否可以让它返回一个类似于
['3','4','6']
的列表,而不是字典?
l = [['A', 'aa', '1', '300'],
     ['A', 'ab', '2', '30'],
     ['A', 'ac', '3', '60'],
     ['B', 'ba', '5', '50'],
     ['B', 'bb', '4', '10'],
     ['C', 'ca', '6', '50']]
[['A', 'ab', '3', '30'],
 ['B', 'bb', '4', '10'],
 ['C', 'ca', '6', '50']]
['3', '4', '6']
import pandas as pd
df = pd.DataFrame(l, columns=['u', 'w', 'y', 'z'])
df.set_index('u', inplace=True)
ll = []
for letter in df.index.unique():
    ll.append((df.ix[letter, 'y'][-1]))
>> The slowest run took 27.86 times longer than the fastest. 
>> This could mean that an intermediate result is being cached.
>> 1000000 loops, best of 3: 887 ns per loop
li = [l[i][0] for i in range(len(l))]
[l[j][2] for j in [''.join(li).rfind(i) for i in set(li)]]
%timeit li = [l[i][0] for i in range(len(l))]
%timeit [l[j][2] for j in [''.join(li).rfind(i) for i in set(li)]]
>> 1000000 loops, best of 3: 1.19 µs per loop
>> 100000 loops, best of 3: 2.57 µs per loop

%timeit [list(group)[-1][2] for key, group in itertools.groupby(l, lambda x: x[0])]
>> 100000 loops, best of 3: 5.11 µs per loop
def get_last_row(xs,q):
    for i in range(len(xs)-1,-1,-1):
        if xs[i][0] == q:
            return xs[i][2]

def get_third_cols(xs):
    third_cols = []
    for q in ["A","B","C"]:
        third_cols.append(get_last_row(xs,q))
    return third_cols

print get_third_cols(xs)
l =  [['A', 'aa', '1', '300'],
  ['A', 'ab', '2', '30'],
  ['A', 'ac', '3', '60'],
  ['B', 'ba', '5', '50'],
  ['B', 'bb', '4', '10'],
  ['C', 'ca', '6', '50']]

import itertools
for key, group in itertools.groupby(l, lambda x: x[0]):
    print key, list(group)[-1]
def tidy(l):
    tmp = []
    prev_row = l[0]

    for row in l:
        if row[0] != prev_row[0]:
            tmp.append(prev_row)
        prev_row = row
    tmp.append(prev_row)
    return tmp
import operator

l = [['A', 'aa', '1', '300'],
  ['A', 'ab', '2', '30'],
  ['A', 'ac', '3', '60'],
  ['B', 'ba', '5', '50'],
  ['B', 'bb', '4', '10'],
  ['C', 'ca', '6', '50']]

def getLast(data, key, value):
    f = operator.itemgetter(key,value)
    store = dict()
    keys = []
    for row in data:
        key, value = f(row)
        if key not in store:
            keys.append(key)
        store[key] = value
    return [store[k] for k in keys]
%timeit getLast(l,0,2)
The slowest run took 9.44 times longer than the fastest. This could mean that an intermediate result is being cached 
100000 loops, best of 3: 2.85 µs per loop
['3', '4', '6']