标签: dictionary-comprehension

在Python中创建一个包含列表推导的字典

我喜欢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

1216
推荐指数
12
解决办法
80万
查看次数

为什么Python中没有元组理解?

众所周知,有列表理解,比如

[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

289
推荐指数
7
解决办法
9万
查看次数

如何在词典理解中使用if/else?

在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 dictionary dictionary-comprehension

104
推荐指数
4
解决办法
7万
查看次数

OrderedDict理解

我可以在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

60
推荐指数
3
解决办法
1万
查看次数

为什么这个循环比创建字典的字典理解更快?

我不是来自软件/计算机科学背景,但我喜欢用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

39
推荐指数
2
解决办法
4439
查看次数

在Python 2.7之前替代dict理解

如何使以下功能与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)

python syntax dictionary dictionary-comprehension

33
推荐指数
1
解决办法
9546
查看次数

返回除指定键之外的字典副本

我想创建一个函数,它返回一个字典的副本,不包括列表中指定的键.

考虑这个字典:

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 dictionary dictionary-comprehension

26
推荐指数
4
解决办法
2万
查看次数

嵌套字典理解python

我无法理解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

24
推荐指数
3
解决办法
2万
查看次数

dict理解中的多个键值对

我试图在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 dictionary dictionary-comprehension

18
推荐指数
2
解决办法
1万
查看次数

如何使用字典理解来计算文档中每个单词的出现次数

我有一个充满文本的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)

上一篇文章供参考:

Python中的简单语法错误,否则dict理解

正如上面的帖子所示,我也使用了以下代码:

{{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 dictionary list python-2.7 dictionary-comprehension

15
推荐指数
2
解决办法
1251
查看次数