我喜欢Python列表理解语法.
它也可以用来创建字典吗?例如,通过迭代成对的键和值:
mydict = {(k,v) for (k,v) in blah blah blah} # doesn't work
Run Code Online (Sandbox Code Playgroud) python dictionary list-comprehension dictionary-comprehension
众所周知,有列表理解,比如
[i for i in [1, 2, 3, 4]]
Run Code Online (Sandbox Code Playgroud)
并且有字典理解,比如
{i:j for i, j in {1: 'a', 2: 'b'}.items()}
Run Code Online (Sandbox Code Playgroud)
但
(i for i in (1, 2, 3))
Run Code Online (Sandbox Code Playgroud)
将最终成为一个发电机,而不是tuple
理解.这是为什么?
我的猜测是a tuple
是不可变的,但这似乎不是答案.
python tuples list-comprehension dictionary-comprehension set-comprehension
在python2.7 +存在任何方式来做类似的东西:
{ something_if_true if condition else something_if_false for key, value in dict_.items() }
Run Code Online (Sandbox Code Playgroud)
我知道你可以用'if'做任何事情
{ something_if_true for key, value in dict_.items() if condition}
Run Code Online (Sandbox Code Playgroud) 我可以在python中为其他dicts的dict comprehension扩展语法,比如collections
模块中的OrderedDict 或继承自我自己的类型dict
吗?
重新绑定dict
名称显然不起作用,{key: value}
理解语法仍然为您提供了一个简单的旧词典,用于理解和文字.
>>> from collections import OrderedDict
>>> olddict, dict = dict, OrderedDict
>>> {i: i*i for i in range(3)}.__class__
<type 'dict'>
Run Code Online (Sandbox Code Playgroud)
那么,如果可能的话我该怎么做呢?如果它只适用于CPython,那就没关系.对于语法,我想我会尝试使用O{k: v}
像我们一样的前缀r'various' u'string' b'objects'
.
注意: 当然我们可以使用生成器表达式,但我更感兴趣的是看到语法方面的hathon是多么糟糕.
python dictionary cpython ordereddictionary dictionary-comprehension
我不是来自软件/计算机科学背景,但我喜欢用Python编写代码,并且通常可以理解为什么事情变得更快.我真的很想知道为什么这个for循环比字典理解运行得更快.任何见解?
问题:给定
a
带有这些键和值的字典,返回一个字典,其值为键,键为值.(挑战:在一行中做到这一点)
和代码
a = {'a':'hi','b':'hey','c':'yo'}
b = {}
for i,j in a.items():
b[j]=i
%% timeit 932 ns ± 37.2 ns per loop
b = {v: k for k, v in a.items()}
%% timeit 1.08 µs ± 16.4 ns per loop
Run Code Online (Sandbox Code Playgroud) python performance python-3.x python-internals dictionary-comprehension
如何使以下功能与Python 2.7之前的Python版本兼容?
gwfuncs = [reboot, flush_macs, flush_cache, new_gw, revert_gw, send_log]
gw_func_dict = {chr(2**i): func for i, func in enumerate(gwfuncs[:8])}
Run Code Online (Sandbox Code Playgroud) 我想创建一个函数,它返回一个字典的副本,不包括列表中指定的键.
考虑这个字典:
my_dict = {
"keyA": 1,
"keyB": 2,
"keyC": 3
}
Run Code Online (Sandbox Code Playgroud)
致电without_keys(my_dict, ['keyB', 'keyC'])
应该返回:
{
"keyA": 1
}
Run Code Online (Sandbox Code Playgroud)
我想用一个整齐的字典理解一行来做这个,但我遇到了麻烦.我的尝试是这样的:
def without_keys(d, keys):
return {k: d[f] if k not in keys for f in d}
Run Code Online (Sandbox Code Playgroud)
这是无效的语法.我怎样才能做到这一点?
我无法理解Python 3中的嵌套字典理解.我从下面的示例中得到的结果输出正确的结构而没有错误,但只包含一个内部键:值对.我没有找到这样的嵌套字典理解的例子; 谷歌搜索"嵌套字典理解python"显示遗留示例,非嵌套理解,或使用不同方法解决的答案.我可能使用了错误的语法.
例:
data = {outer_k: {inner_k: myfunc(inner_v)} for outer_k, outer_v in outer_dict.items() for inner_k, inner_v in outer_v.items()}
Run Code Online (Sandbox Code Playgroud)
此示例应返回原始字典,但内部值已修改myfunc
.
outer_dict字典的结构,以及结果:
{outer_k: {inner_k: inner_v, ...}, ...}
Run Code Online (Sandbox Code Playgroud) python syntax nested list-comprehension dictionary-comprehension
我试图在dict理解中创建多个键:值对,如下所示:
{'ID': (e[0]), 'post_author': (e[1]) for e in wp_users}
Run Code Online (Sandbox Code Playgroud)
我收到了 "missing ','"
我也这样试过:
[{'ID': (e[0]), 'post_author': (e[1])} for e in wp_users]
Run Code Online (Sandbox Code Playgroud)
然后我收到了 "list indices must be integers, not str"
我理解,但不确定纠正这个的最佳方法,如果多个键:值对可以用dict理解吗?
我有一个充满文本的python列表.就像从每个文档中设置单词一样.因此,对于每个文档,我都有一个列表,然后列出所有文档.
所有列表仅包含唯一的单词.我的目的是计算完整文档中每个单词的出现次数.我可以使用以下代码成功完成此操作:
for x in texts_list:
for l in x:
if l in term_appearance:
term_appearance[l] += 1
else:
term_appearance[l] = 1
Run Code Online (Sandbox Code Playgroud)
但是我想用字典理解来做同样的事情.这是我第一次尝试编写字典理解并使用stackoverflow中以前的现有帖子,我已经能够编写以下内容:
from collections import defaultdict
term_appearance = defaultdict(int)
{{term_appearance[l] : term_appearance[l] + 1 if l else term_appearance[l] : 1 for l in x} for x in texts_list}
Run Code Online (Sandbox Code Playgroud)
上一篇文章供参考:
正如上面的帖子所示,我也使用了以下代码:
{{l : term_appearance[l] + 1 if l else 1 for l in x} for x in texts_list}
Run Code Online (Sandbox Code Playgroud)
上面的代码成功生成了空列表,但最终抛出了以下回溯:
[]
[]
[]
[]
Traceback (most recent call last): …
Run Code Online (Sandbox Code Playgroud) python ×10
dictionary ×7
syntax ×2
cpython ×1
list ×1
nested ×1
performance ×1
python-2.7 ×1
python-3.x ×1
tuples ×1