簡體   English   中英

Python從列表中刪除幾個重復項

[英]Python remove couple of duplicates from List

我知道類似的問題已經可以解決,但我認為我的情況有所不同。 我有一個帶有大表(40.000多個條目)的mysql數據庫,表結構是這樣的:

    Field    |  Type       |Null |Key  |Default |   Extra   
    -----------------------------------------------------
    Messaggio|  longtext   |NO   |     |NULL    |
    Id       |  bigint(20) |NO   |     |NULL    |
    Data     |  date       |NO   |     |NULL    |
    Partito  |  text       |NO   |     |NULL    |
    Numero   |  bigint(23) |NO   |PRI  |NULL    |auto_increment

我必須刪除在“ Messaggio”,“ Id”和“ Partito”中具有相同值的行的重復項,例如:

 Messaggio |Id      | Data      | Partito    | numero   |
----------------------------------------------------------
long_text1 | 123    | somedate  | M5s        |  1       |
long_text1 | 123    | somedate  | M5s        |  2       |
long_text2 | 123    | somedate  | M5s        |  3       |

在這種情況下,我必須刪除前兩個條目之一。

我試過了

db = MySQLdb.connect(host="localhost", port=xxxxx, user="xxxxxxx", passwd="xxxxxx", db="xxxxx", charset='utf8',  use_unicode=True)db.ping(True)

cursor = db.cursor()

cursor.execute("SET NAMES utf8;")

cursor.execute("SELECT `Messaggio`, `Id`, `Data`, `Partito`, `Numero` FROM `Statuses` WHERE 1")

data = cursor.fetchall()

data2 = (dict((x[0], x) for x in data).values()

print (data2)
print (len(data))
print (len(data2))

輸出:

- a very long list
- 41804
- 39558

我不清楚這個代碼是什么( (dict((x[0], x) for x in data).values() )的作用(我對python很陌生,而且我也必須弄清楚字典的用法的工作原理是,它首先刪除了相同的列表(在5個字段中具有相同的值),但這是不可能的,因為字段“ Numero”是AI,因此它不能重復(我已經在Mysql上查詢過並且沒有重復的“ Numero”)

我的問題:

  1. 為什么該代碼刪除了約2.000個項目? 它會刪除任何重復項嗎?

  2. 獲得結果的最佳方法是什么?

它刪除除了最后一條消息外具有相同消息消息的所有行,請考慮以下代碼:

>>> {1:2, 1:3}
{1: 3}

您正在建立一個具有多個分配給同一個鍵的字典,只有最后一個確實存在

回到:

(dict((x[0], x) for x in data).values()

從末尾開始,它列出了字典的值

>>> {1:'a', 2:'b'}.values()
['a', 'b']

dict是通過生成器(“ tuple of tuples”)創建的:

>>> dict(((1,'a'),(2,'b')))
{1: 'a', 2: 'b'}

最內在的部分是這樣的:

>>> list((x[0], x) for x in [[1,2,3], ['a','b','c']])
[(1, [1, 2, 3]), ('a', ['a', 'b', 'c'])]

所以我想你要使用:

(dict((x[0], x[1], x[3]), x) for x in data).values()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM