将具有三个元素的元组转换成字典

时间:2018-10-01 14:53:26

标签: python dictionary tuples

这是我的元组

(0, 7, 4)
(1, 7, 4)
(2, 7, 4)
(3, 7, 4)
(0, 4, 1)
(0, 4, 3)
(0, 6, 4)

我想将其转换为字典作为示例

{0:(7,4), (4, 1), (4, 3), (6, 4), 1: (7, 4), 2:(7, 4), ....}

基本上,元组的第一个元素是键,第二个和第三个元素是值。

元组是使用:

生成的
for i in range(len(vertices)): 
     #print(i) 
     for j in edges: 
     d= (i, j[0], j[1]) 
     print(d) 

5 个答案:

答案 0 :(得分:3)

您可以使用以下循环将列表追加到列表中:

d = {}
for k, *v in l:
    d.setdefault(k, []).append(tuple(v))

所以给定:

l = [
    (0, 7, 4),
    (1, 7, 4),
    (2, 7, 4),
    (3, 7, 4),
    (0, 4, 1),
    (0, 4, 3),
    (0, 6, 4)
]

d将变为:

{0: [(7, 4), (4, 1), (4, 3), (6, 4)], 1: [(7, 4)], 2: [(7, 4)], 3: [(7, 4)]

答案 1 :(得分:0)

而不是这样做

print ((i, j[0], j[1]))

您也可以

dict[i] = (j[0], j[1]) 

但是,这不适用于重复索引。因此,让我想到一种更好的方法...

更新

复习后,方法是使用setdefault(如先前在另一个答案中所述),为了提供与其他答案不同的内容,我展示了很长的路要走:

dictionary = d()
for i in range(len(vertices)): 
    for j in edges:             
        if i in d:
           d[i].append((j[0], j[1]))
        else:
           d[i] = (j[0], j[1]) 

-----改进了哪些功能----

dictionary = dict()
    for i in range(len(vertices)): 
        for j in edges: 
            d= (i, j[0], j[1])
            dictionary[i]=[]
            #print(d) 
            if i in dictionary :

                #print(dictionary[i])
                dictionary[i].append((j[0], j[1]),)
            else:
                dictionary[i] = (j[0], j[1])
    print(dictionary)

答案 2 :(得分:0)

尝试一下:

from itertools import groupby


a =  [(0, 7, 4), (1, 7, 4), (2, 7, 4), (3, 7, 4), (0, 4, 1), (0, 4, 3), (0, 6, 4)]
l={} 
for i,g in groupby(a, lambda x:x[0]): 
    l[str(i)] = []  
    for v in g: 
        l[str(i)].append(v[1:])   

答案 3 :(得分:0)

我不确定您在this comment中发布的代码是否正确,但是可以直接在循环内部填充字典

require("js/inc/globalDefines.js");

答案 4 :(得分:0)

这也应该起作用

DELETE FROM person_address WHERE id IN (
SELECT address_id
FROM person_address
WHERE person_address.person_id < 100
GROUP BY address_id
HAVING count(*) > 1
)