2009-10-12 32 views
1

我有一個數組,每個案例都有一些標誌。 爲了使用打印數組中的HTML和使用合併單元格,我需要轉換這樣的:如何用python去掉元組列表?

[{'serve': False, 'open': False}, {'serve': False, 'open': False}, {'serve': False, 'open': False}, {'serve': False, 'open': False}, {'serve': False, 'open': False}, {'serve': False, 'open': False}, {'serve': False, 'open': False}, {'serve': False, 'open': False}, {'serve': False, 'open': False}, {'serve': False, 'open': False}, {'serve': False, 'open': False}, {'serve': False, 'open': False}, {'serve': True, 'open': True}, {'serve': True, 'open': True}, {'serve': True, 'open': True}, {'serve': True, 'open': True}, {'serve': True, 'open': True}, {'serve': True, 'open': True}, {'serve': True, 'open': True}, {'serve': True, 'open': True}, {'serve': True, 'open': True}, {'serve': True, 'open': True}, {'serve': True, 'open': True}, {'serve': True, 'open': True}, {'serve': True, 'open': True}, {'serve': True, 'open': True}, {'serve': True, 'open': True}, {'serve': True, 'open': True}, {'serve': True, 'open': True}, {'serve': True, 'open': True}, {'serve': True, 'open': True}, {'serve': True, 'open': True}, {'serve': True, 'open': True}, {'serve': True, 'open': True}, {'serve': True, 'open': True}, {'serve': True, 'open': True}, {'serve': True, 'open': True}, {'serve': True, 'open': True}, {'serve': True, 'open': True}, {'serve': True, 'open': True}, {'serve': True, 'open': True}, {'serve': True, 'open': True}, {'serve': True, 'open': True}, {'serve': True, 'open': True}, {'serve': True, 'open': True}, {'serve': True, 'open': True}, {'serve': True, 'open': True}, {'serve': True, 'open': True}, {'serve': True, 'open': True}, {'serve': True, 'open': True}, {'serve': True, 'open': True}, {'serve': True, 'open': True}, {'serve': True, 'open': True}, {'serve': True, 'open': True}, {'serve': True, 'open': True}, {'serve': True, 'open': True}, {'serve': True, 'open': True}, {'serve': True, 'open': True}, {'serve': True, 'open': True}, {'serve': True, 'open': True}, {'serve': True, 'open': True}, {'serve': True, 'open': True}, {'serve': True, 'open': True}, {'serve': True, 'open': True}, {'serve': False, 'open': True}, {'serve': False, 'open': True}, {'serve': False, 'open': True}, {'serve': False, 'open': True}, {'serve': False, 'open': True}, {'serve': False, 'open': True}, {'serve': False, 'open': True}, {'serve': False, 'open': True}, {'serve': False, 'open': False}, {'serve': False, 'open': False}, {'serve': False, 'open': False}, {'serve': False, 'open': False}, {'serve': False, 'open': False}, {'serve': False, 'open': False}, {'serve': False, 'open': False}, {'serve': False, 'open': False}, {'serve': False, 'open': False}, {'serve': False, 'open': False}, {'serve': False, 'open': False}, {'serve': False, 'open': False}, {'serve': False, 'open': False}, {'serve': False, 'open': False}, {'serve': False, 'open': False}, {'serve': False, 'open': False}, {'serve': False, 'open': False}, {'serve': False, 'open': False}, {'serve': False, 'open': False}, {'serve': False, 'open': False}, {'serve': False, 'open': False}, {'serve': False, 'open': False}, {'serve': False, 'open': False}, {'serve': False, 'open': False}] 

在本作中開旗:

[{'colspan': 12, 'open': False}, {'colspan': 60, 'open': True}, {'colspan': 24, 'open': False}] 

而另一生成服務之一。

我怎麼可以這樣使用Python的最聰明的方法是什麼?

我可以指望的情況下,一個接一個,但它沒有接縫是一個好主意。

+0

你的問題相當不清楚。此外,這些colspan價值*** ***怪異*** – aviraldg 2009-10-12 07:56:36

+0

這個colspan值是這個簡單的例子。 colspan值是具有相同標誌的連續情況的數量。 – Natim 2009-10-12 08:00:56

回答

4
def cluster(dicts, key): 
    current_value = None 
    current_span = 0 
    result = [] 

    for d in dicts: 
     value = d[key] 
     if current_value is None: 
      current_value = value 
     elif current_value != value: 
      result.append({'colspan': current_span, key: current_value}) 
      current_value = value 
      current_span = 0 
     current_span += 1 

    result.append({'colspan': current_span, key: current_value}) 
    return result 

by_open = cluster(data, 'open') 
by_serve = cluster(data, 'serve') 

第二個版本,由丹尼斯的回答和他使用的itertools.groupby啓發:

import itertools 
import operator 

def make_spans(data, key): 
    groups = itertools.groupby(data, operator.itemgetter(key)) 
    return [{'colspan': len(list(items)), key: value} for value, items in groups] 
+0

colspan應該每次重啓。此功能給我 [{ '列跨度':12, '開放':FALSE},{ '列跨度':72, '開放':TRUE},{ '列跨度':96, '開放':假}] – Natim 2009-10-12 08:28:14

+0

我的代碼中有一段代碼丟失,我在幾分鐘前糾正過('current_span = 0')。它現在應該如預期那樣工作。請原諒我的問題,但你知道如何編程,對吧?我的意思是,代碼只是讓你開始的一個例子,而不是生產就緒的代碼。如果你明白代碼在做什麼,發現你描述的錯誤應該很容易! – 2009-10-12 08:35:00

+0

是的,我固定它自己以及:) – Natim 2009-10-12 10:21:45

4

這是不明確你需要什麼,但我希望下面的例子將幫助您:

>>> groupped = itertools.groupby(your_list, operator.itemgetter('open')) 
>>> [{'colspan': len(list(group)), 'open': open} for open, group in groupped] 
[{'colspan': 12, 'open': False}, {'colspan': 60, 'open': True}, {'colspan': 78, 'open': False}] 
>>> groupped = itertools.groupby(your_list) 
>>> [dict(d, colspan=len(list(group))) for d, group in groupped] 
[{'serve': False, 'open': False, 'colspan': 12}, {'serve': True, 'open': True, 'colspan': 52}, {'serve': False, 'open': True, 'colspan': 8}, {'serve': False, 'open': False, 'colspan': 78}] 
+0

我不知道爲什麼最後的合併單元格沒有預期值。 – Natim 2009-10-12 08:32:47

+0

好吧,知道我知道......我的示例獲得了150個案例而不是96個......當您知道如何使用它時,Python非常強大。謝謝。 – Natim 2009-10-12 08:37:19

+2

+1包括電池!使用'itertools.groupby'是要走的路! – 2009-10-12 08:38:17