2015-07-11 66 views
1

我試圖更新一個列表內的列表,我想刪除任何列表(在列表的列表中)有一個項目比任何我'與它比較。例如,給定以下列表的列表的字典..對列表的列表操作

mydict = {3603172: [ 
    ['M2-HCg18', 12.00, 12.00, 9.00, '12 x 12 x 9'], 
    ['M2-HCg18', 16.00, 14.00, 8.00, '16 x 14 x 8'], 
    ['M2-HCg18', 16.00, 14.00, 14.00, '16 x 14 x 14'], 
    ['M2-HCg18', 18.00, 18.00, 18.00, '18 x 18 x 18'], 
    ['M2-HCg18', 16.00, 10.25, 0.25, 'Bubble Mailer #5 10.5 x 16'], 
    ['M2-HCg18', 7.25, 4.75, 1.00, 'Bubble Mailer #4 7.25 x 5'], 
    ['M2-HCg18', 9.25, 7.25, 1.00, 'Bubble Mailer DVD 10.25 x 7.25'], 
    ['M2-HCg18', 28.00, 14.00, 8.00, '28x14x8'], 
    ['M2-HCg18', 28.00, 14.00, 0.25, '28x14x4'], 
    ['M2-HCg18', 16.00, 10.25, 0.25, 'Bubble Mailer #5 10.5 x 16'], 
    ]} 

上面dict有一個鍵(3603172),其值是一個列表的列表。請注意,列表中可能有重複的列表。我想要做的是將任何一個內部列表中的第四個項目與給定值進行比較,如果列表中的第三個項目較小,則刪除列表。所以如果我的值是0.5,我想刪除所有在索引3處小於0.5的內部列表。

我知道我可以使用mydict.itervalues()並對列表中的值進行操作的列表,然後使用帶有0.5的if語句在索引3上運行比較,但如果索引3處的值小於0.5,我不知道清除列表的乾淨方式。 在上面的例子中,我想刪除索引爲3(小於0.5)的所有列表。 這將是一個很好的方法來做到這一點?

回答

0

使用詞典理解。

>>> mydict = {3603172: [ 
    ['M2-HCg18', 12.00, 12.00, 9.00, '12 x 12 x 9'], 
    ['M2-HCg18', 16.00, 14.00, 8.00, '16 x 14 x 8'], 
    ['M2-HCg18', 16.00, 14.00, 14.00, '16 x 14 x 14'], 
    ['M2-HCg18', 18.00, 18.00, 18.00, '18 x 18 x 18'], 
    ['M2-HCg18', 16.00, 10.25, 0.25, 'Bubble Mailer #5 10.5 x 16'], 
    ['M2-HCg18', 7.25, 4.75, 1.00, 'Bubble Mailer #4 7.25 x 5'], 
    ['M2-HCg18', 9.25, 7.25, 1.00, 'Bubble Mailer DVD 10.25 x 7.25'], 
    ['M2-HCg18', 28.00, 14.00, 8.00, '28x14x8'], 
    ['M2-HCg18', 28.00, 14.00, 0.25, '28x14x4'], 
    ['M2-HCg18', 16.00, 10.25, 0.25, 'Bubble Mailer #5 10.5 x 16'], 
    ]} 
>>> {i:[x for x in j if x[3] > 0.5] for i,j in mydict.items()} 
{3603172: [['M2-HCg18', 12.0, 12.0, 9.0, '12 x 12 x 9'], ['M2-HCg18', 16.0, 14.0, 8.0, '16 x 14 x 8'], ['M2-HCg18', 16.0, 14.0, 14.0, '16 x 14 x 14'], ['M2-HCg18', 18.0, 18.0, 18.0, '18 x 18 x 18'], ['M2-HCg18', 7.25, 4.75, 1.0, 'Bubble Mailer #4 7.25 x 5'], ['M2-HCg18', 9.25, 7.25, 1.0, 'Bubble Mailer DVD 10.25 x 7.25'], ['M2-HCg18', 28.0, 14.0, 8.0, '28x14x8']]} 
>>> pprint({i:[x for x in j if x[3] > 0.5] for i,j in mydict.items()}) 
{3603172: [['M2-HCg18', 12.0, 12.0, 9.0, '12 x 12 x 9'], 
      ['M2-HCg18', 16.0, 14.0, 8.0, '16 x 14 x 8'], 
      ['M2-HCg18', 16.0, 14.0, 14.0, '16 x 14 x 14'], 
      ['M2-HCg18', 18.0, 18.0, 18.0, '18 x 18 x 18'], 
      ['M2-HCg18', 7.25, 4.75, 1.0, 'Bubble Mailer #4 7.25 x 5'], 
      ['M2-HCg18', 9.25, 7.25, 1.0, 'Bubble Mailer DVD 10.25 x 7.25'], 
      ['M2-HCg18', 28.0, 14.0, 8.0, '28x14x8']]} 
+0

或'pprint({I :[x for x in j if if x [3] <0.5] for i,j in mydict.items()})' –

+0

爲什麼要downvote?我認爲這是op的期望.. –

+0

謝謝。我認爲這對我有用。上面羅伊的補充也是一個很好的解決方案,但我能夠更好地閱讀這個。 – user2993021

0

遍歷列表與列表逆轉,從原始類型的字典中刪除列表

k = mydict.keys()[0] 
for val in reversed(mydict[k]): 
    if val[3] < .5: 
     mydict[k].remove(val) 
print(mydict) 

如果你有一個以上的關鍵:

for v in mydict.itervalues(): 
    for val in reversed(v): 
     if val[3] < .5: 
      v.remove(val) 
print(mydict)