Python:将字典的项目发送到列表列表

时间:2015-12-11 22:00:03

标签: list python-3.x dictionary

我有一本字典:

Dd = {'a':99, 'aa': 109, 'abc':199, 'aabb':100.99, 'abcabc':99.109}

我想列出每个Key,Value对,然后将每个列表附加到一个主列表。我的意思是这样的:

Ll = [['a', 99], ['aa', 109], ['abc', 199], ['aabb', 100.99], ['abcabc', 99.109]]

我写了这段代码:

L = Ll = []
for (Chr, Num) in Dd.items ():
    L.append (Chr)
    L.append (Num)
    Ll.append (L)
    L = [] #Flushing this variable to be refilled in next loop

Ll的输出并非我的预期:

print (Ll)

['aabb', 100.99, [...], ['abcabc', 99.109], ['a', 99], ['abc', 199], ['aa', 109]]

为什么会这样?!如何制作我想要的清单?

4 个答案:

答案 0 :(得分:2)

假设你有字典Dd。您想要准备一个列表,其中包含键和值对,我们可以使用理解。

以下是单行解决方案:

[ [x,y] for x in Dd.keys() for y in Dd.values() if Dd[x] == y ]

甚至更好:

[[x, y] for x, y in Dd.items()]

答案 1 :(得分:2)

这里,您的问题包含在第一行。通过编写L = Ll = [],L和Ll都引用相同的列表。

使用以下声明:

L, Ll = [], []

它会更好用(LLl初始化为两个不同的列表)。 Morover,你可以使用Romaan指出的列表理解。

此外,如果您希望列表按此特定顺序排列,则需要重新考虑dict的用法,其中未定义键顺序。如果关键订单对您很重要,请参阅collections.OrderedDict

答案 2 :(得分:2)

在Python 2中,.items()会为list提供tuplelist。将其转换为list Ll = list(map(list, Dd.items())) s并不难:

Ll = [[k, v] for k, v in Dd.items()]

或使用列表理解:

L

您的实际问题是Lllist是对同一x = y = z的引用。 x表示yzL都引用相同的内容;如果那个东西是可变的,那么一个突变,不包括重新分配,就会改变所有这些。您的代码在第一个循环后用新的list替换append,但在第一个循环中,每个list都附加到子列表和父级(因为它们是&#39;}同一件事情)。对于L, Ll = [], [],您需要L,但坦率地说,L = [Chr, Num]并不需要append,因为对于固定的两项,您只需指定list在每个循环上(或直接import requests import bs4 def pricechecker(url): r = requests.get(url) soup = bs4.BeautifulSoup(r.text, 'html5lib') print (soup.select('span.unchanged')[0].text) 相同的 // $sheetData an array created from an Excel Sheet for($i=0; $i <= count($sheetData); $i++) { $sql; $sql .= "INSERT INTO equipment"; $sql .= "(tag,date)"; $sql .= "VALUES(?,?)"; $sql .= "ON DUPLICATE KEY UPDATE number=VALUES(tag), date=VALUES(date)"; if($stmt = $db->prepare($sql)) { if(Utility::filterNull($sheetData[$i][$idxOfTag]),Utility::convertDT($sheetData[$i][$idxOfDate]) != "1969-12-31 23:59:59") { $stmt->bind_param("ss",$sheetData[$i][$idxOfTag],$sheetData[$i][$idxOfDate]); $stmt->execute(); } } else { DebugLog($debugFileName,"Prepared Statement is false. Error: " . $stmt->error); DebugLog($debugFileName,"i = " . $i); } } // i loop 字面值。

答案 3 :(得分:0)

我很确定你的问题是物品的顺序。使用import collections然后创建OrderedDict并使用list comprehension获取此有序字典的项目以创建列表。