社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
私信  •  关注

Jim Fasarakis Hilliard Cas

Jim Fasarakis Hilliard Cas 最近创建的主题
Jim Fasarakis Hilliard Cas 最近回复了
8 年前
回复了 Jim Fasarakis Hilliard Cas 创建的主题 » 迭代python字典[重复]

转换为列表而不使用 keys 方法使其更具可读性:

list(newdict)

而且,当翻阅字典时,不需要 keys() :

for key in newdict:
    print key

除非您在循环中修改它,这需要预先创建的键列表:

for key in list(newdict):
    del newdict[key]

在Python2上,使用 keys() .

7 年前
回复了 Jim Fasarakis Hilliard Cas 创建的主题 » 迭代python字典[重复]

python>=3.5可选:解包到列表文本中 [*newdict]

新的 unpacking generalizations (PEP 448) 与python 3.5一起引入,现在您可以轻松地执行以下操作:

>>> newdict = {1:0, 2:0, 3:0}
>>> [*newdict]
[1, 2, 3]

打开包装 * 与一起工作 任何 对象,它是可Iterable的,并且由于字典在遍历时返回它们的键,所以您可以通过在列表文本中使用它轻松地创建列表。

添加 .keys() [*newdict.keys()] 可能有助于使您的意图更明确一点,尽管这会使您损失函数查找和调用。(老实说,这不是你应该做的事 真正地 担心)。

这个 *iterable 语法类似于 list(iterable) 其行为最初记录在 Calls section python参考手册。在PEP 448中,限制 *无法识别 可能出现的是松动的,允许它也被放在列表、集合和元组文本中,参考手册 Expression lists 也更新了以说明这一点。


虽然相当于 list(newdict) 不同的是,它更快(至少对于小字典而言),因为实际上没有执行函数调用:

%timeit [*newdict]
1000000 loops, best of 3: 249 ns per loop

%timeit list(newdict)
1000000 loops, best of 3: 508 ns per loop

%timeit [k for k in newdict]
1000000 loops, best of 3: 574 ns per loop

对于较大的字典,速度几乎是相同的(遍历大型集合的开销比函数调用的成本小)。


以类似的方式,您可以创建元组和字典键集:

>>> *newdict,
(1, 2, 3)
>>> {*newdict}
{1, 2, 3}

注意元组中的尾随逗号!

8 年前
回复了 Jim Fasarakis Hilliard Cas 创建的主题 » 迭代python字典[重复]

尝试 list(newdict.keys()) .

这将转换 dict_keys 对象到列表。

另一方面,你应该问问自己这是否重要。编写代码的方法是假设duck输入法( 如果它看起来像一只鸭子,像一只鸭子嘎嘎叫,那就是一只鸭子。 )这个 听写键 对象在大多数情况下都像一个列表。例如:

for key in newdict.keys():
  print(key)

显然,插入操作符可能不起作用,但对于字典键列表来说,这没有多大意义。