我有一本字典:
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]]
为什么会这样?!如何制作我想要的清单?
答案 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 = [], []
它会更好用(L
和Ll
初始化为两个不同的列表)。
Morover,你可以使用Romaan指出的列表理解。
此外,如果您希望列表按此特定顺序排列,则需要重新考虑dict的用法,其中未定义键顺序。如果关键订单对您很重要,请参阅collections.OrderedDict
。
答案 2 :(得分:2)
在Python 2中,.items()
会为list
提供tuple
个list
。将其转换为list
Ll = list(map(list, Dd.items()))
s并不难:
Ll = [[k, v] for k, v in Dd.items()]
或使用列表理解:
L
您的实际问题是Ll
和list
是对同一x = y = z
的引用。 x
表示y
,z
和L
都引用相同的内容;如果那个东西是可变的,那么一个突变,不包括重新分配,就会改变所有这些。您的代码在第一个循环后用新的list
替换append
,但在第一个循环中,每个list
都附加到子列表和父级(因为它们是'}同一件事情)。对于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获取此有序字典的项目以创建列表。