字典在Python 3.6中排序(至少在CPython实现下),与之前的版本不同.这似乎是一个重大变化,但它只是文档中的一小段.它被描述为CPython实现细节而不是语言特性,但也暗示这可能成为未来的标准.
在保留元素顺序的同时,新字典实现如何比旧字典实现更好?
以下是文档中的文字:
dict()现在使用PyPy开创的"紧凑"表示.与Python 3.5相比,新dict()的内存使用量减少了20%到25%.PEP 468(在函数中保留**kwargs的顺序.)由此实现.这个新实现的顺序保留方面被认为是一个实现细节,不应该依赖(这可能会在未来发生变化,但是在更改语言规范之前,希望在几种版本的语言中使用这个新的dict实现为所有当前和未来的Python实现强制命令保留语义;这也有助于保持与随机迭代顺序仍然有效的语言的旧版本的向后兼容性,例如Python 3.5).(由INADA Naoki在issue 27350中提供.最初由Raymond Hettinger提出的想法.)
2017年12月更新:Python 3.7 保证了dict保留插入顺序
我收到了'too many values to unpack'错误.知道如何解决这个问题吗?
first_names = ['foo', 'bar']
last_names = ['gravy', 'snowman']
fields = {
'first_names': first_names,
'last_name': last_names,
}
for field, possible_values in fields: # error happens on this line
Run Code Online (Sandbox Code Playgroud) 嘿大家我正在尝试用Python编写一个程序来充当测验游戏.我在程序开头创建了一个字典,其中包含用户将被测验的值.它的设置如下:
PIX0 = {"QVGA":"320x240", "VGA":"640x480", "SVGA":"800x600"}
Run Code Online (Sandbox Code Playgroud)
所以我定义了一个函数,它使用for循环遍历字典键并要求用户输入,并将用户输入与匹配的值进行比较.
for key in PIX0:
NUM = input("What is the Resolution of %s?" % key)
if NUM == PIX0[key]:
print ("Nice Job!")
count = count + 1
else:
print("I'm sorry but thats wrong. The correct answer was: %s." % PIX0[key] )
Run Code Online (Sandbox Code Playgroud)
这是工作正常输出看起来像这样:
What is the Resolution of Full HD? 1920x1080
Nice Job!
What is the Resolution of VGA? 640x480
Nice Job!
Run Code Online (Sandbox Code Playgroud)
所以我希望能够做的是有一个单独的功能,以另一种方式询问问题,为用户提供分辨率编号并让用户输入显示标准的名称.所以我想创建一个for循环,但我真的不知道如何(或者你是否可以)迭代字典中的值并要求用户输入密钥.
我想要输出看起来像这样:
Which standard has a resolution of 1920x1080? Full HD …Run Code Online (Sandbox Code Playgroud) 我有一个包含JSON数据的文件,如下所示:
{
"Results": [
{"Id": "001",
"Name": "Bob",
"Items": {
"Cars": "1",
"Books": "3",
"Phones": "1"}
},
{"Id": "002",
"Name": "Tom",
"Items": {
"Cars": "1",
"Books": "3",
"Phones": "1"}
},
{"Id": "003",
"Name": "Sally",
"Items": {
"Cars": "1",
"Books": "3",
"Phones": "1"}
}]
}
Run Code Online (Sandbox Code Playgroud)
我无法弄清楚如何正确循环JSON.我想遍历数据并为数据集中的每个成员获取一个带有汽车的名称.我怎么能做到这一点?
import json
with open('data.json') as data_file:
data = json.load(data_file)
print data["Results"][0]["Name"] # Gives me a name for the first entry
print data["Results"][0]["Items"]["Cars"] # Gives me the number of cars for the first entry
Run Code Online (Sandbox Code Playgroud)
我试过通过它们循环:
for …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 tkinter 和 python 制作一个音乐应用程序,但我无法摆脱“ValueError:没有足够的值来解压(预期 2,得到 1)”错误。看看我的代码,你就会很清楚我在处理什么。
机制很简单,我首先通过字典(列表)显示歌曲选项,并在输入后显示“j”的对应值,(例如,如果输入为1,则j为1,j的对应值i) 保存为歌曲名并通过播放音乐来执行程序。
list = {
'1':'Say You Won t Let Go.mp3','2':'In the Jungle the mighty jungle.mp3'
}
lost = ''
print(list)
print("which one?")
this_one = int(input(''))
for j,i in list:
if j == this_one:
lost = i
Run Code Online (Sandbox Code Playgroud) 我有一个正在尝试循环的函数,目的是在这些变量", "后面加上 a 来修改这些变量。
def create_merge(address, city, state_province, country, postal_code, contact, state):
for key in locals().keys():
for value in locals().values():
print(key, value)
Run Code Online (Sandbox Code Playgroud)
这......有点管用,但不是真的。虽然它为我提供了该定义中所有值的正确读数,但它仅显示state键。我明白为什么,因为我在第一个键移动到第二个键之前循环遍历第一个键中的所有值。
我想要的是一个能够产生如下结果的循环:
address 123 My Address
city
state_province Illinois
country USA
postal_code 12345
contact McGruff
state Illinois
Run Code Online (Sandbox Code Playgroud)
显然,这只是首先列出键,然后列出值。如何一次执行一个键和一个值?
for key in locals().keys():
print (key)
for value in locals().values():
print (value)
Run Code Online (Sandbox Code Playgroud)
...print (key, key.values())不起作用。
也不
for key in locals().keys():
print (key, locals().values())
Run Code Online (Sandbox Code Playgroud)
我想我已经很接近了,但就是无法得到它!感谢您的任何建议/意见。
最后注意:我需要以一种可以查看 是否不为空的方式来执行此操作,如果不为空,则在函数继续之前value修改该值。", "
这两个设置使用print(i, j)并print(i)返回相同的结果.是否有人应该使用另一个或者交替使用它们是否正确?
desc = {'city': 'Monowi', 'state': 'Nebraska', 'county':'Boyd', 'pop': 1}
for i, j in desc.items():
print(i, j)
for i in desc.items():
print(i)
Run Code Online (Sandbox Code Playgroud)
for i, j in desc.items():
print(i, j)[1]
for i in desc.items():
print(i)[1]
Run Code Online (Sandbox Code Playgroud) 我正在尝试在 python 中探索 Algorithmia 图像标记器。
client.algo("deeplearning/IllustrationTagger/0.2.5")
client.algo("deeplearning/InceptionNet/1.0.3")
Run Code Online (Sandbox Code Playgroud)
但这与这个问题不太相关,因为它通常适用于字典。
for dict in dictList:
print(dict)
Run Code Online (Sandbox Code Playgroud)
这是输出:
//{'安全':0.9950032234191896}
//{'有问题':0.004409242421388626}
//{'显式':0.00011681715113809332}
我可以很好地访问密钥:
for dict in dictList:
for key in dict:
print(key)
Run Code Online (Sandbox Code Playgroud)
//安全的
//可疑的
//显式
但是当我试图解压密钥和值时:
for dict in dictList:
for key, value in dict:
print(key)
print(value)
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
对于键,字典中的值:
ValueError:要解压的值太多(预期为 2)
如何访问键和值?
编辑:我已将 obj 和数组重命名为 dict 和 list 以免与 Javascript 符号混淆。
我已经搜索了互联网,似乎无法找到适合我的情况的解决方案。
我有一本字典:
{"1528430400000": 129, "1528516800000": 123.14, "1528603200000": 117.28, "1528689600000": 111.42, "1528776000000": 105.56, "1528862400000": 99.7, "1528948800000": 93.84, "1529035200000": 87.98, "1529121600000": 82.12, "1529208000000": 76.26, "1529294400000": 70.4, "1529380800000": 64.54, "1529467200000": 58.68, "1529553600000": 52.82, "1529640000000": 46.96, "1529726400000": 41.1, "1529812800000": 35.24, "1529899200000": 29.38, "1529985600000": 23.52, "1530072000000": 17.66, "1530158400000": 11.8, "1530244800000": 5.94, "1530331200000": 0.08, "1530417600000": 0}'
Run Code Online (Sandbox Code Playgroud)
其中每个键都是一个 javascript 格式的日期。
我正在寻找对每个键和值的简单迭代。
例子:
{% for key,value in dict %}
{{key}}, {{value}}
{% endfor %}
Run Code Online (Sandbox Code Playgroud) python ×9
dictionary ×3
python-3.x ×3
key-value ×2
object ×2
arrays ×1
flask ×1
for-loop ×1
iteration ×1
iterator ×1
jinja2 ×1
json ×1
keyvaluepair ×1
loops ×1
python-2.x ×1
python-3.6 ×1