标签: dictionary-comprehension

在字典理解中临时分配变量的优雅方式?

出于好奇,有可能将以下逻辑写成一个不错的词典理解吗?

a = "a c\nb c\nn q\n".split('\n')[:-1]

output = {}
for line in a:
    tmp = line.split(' ')
    output[tmp[0]] = tmp[1]
Run Code Online (Sandbox Code Playgroud)

我写了以下内容,但没有临时任务,我必须拆分两次,这是不幸的:

{line.split(' ')[0]:line.split(' ')[1] for line in a}
Run Code Online (Sandbox Code Playgroud)

有可能更优雅吗?

python dictionary dictionary-comprehension

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

Python-OrderedDict中的字典理解不起作用

我有以下代码:

self.statusIcons = collections.OrderedDict
for index in guiConfig.STATUS_ICON_SETS:
     self.statusIcons[index] = {condition:\
           wx.Image(guiConfig.STATUS_ICON_STRING.format(index, condition),wx.BITMAP_TYPE_PNG).ConvertToBitmap() \
           for condition in guiConfig.STATUS_ICON_CONDITIONS}
Run Code Online (Sandbox Code Playgroud)

它建立了wx.Image对象的常规字典的有序字典,这些字典通过理解来设置。我最初嵌套了dict理解,但效果很好,但决定我需要订购顶级dict,所以最终以这种方式结束。问题是,现在我收到此错误:

TypeError: 'type' object does not support item assignment
Run Code Online (Sandbox Code Playgroud)

将相关代码归零。我无法弄清楚我做错了什么。即使它不是顶级的,ordersdict是否也不允许理解?也许它会尝试对有序词典中的所有词典进行排序,并且因为理解力处于较低水平而不能这样做吗?不确定,也许这是因为隧道视觉我无法发现的荒谬之处。

PS:如果您需要了解我在上面引用的全局变量中包含的内容:

STATUS_ICON_SETS = ("comp", "net", "serv", "audio", "sec", "ups", "zwave", "stats")
STATUS_ICON_CONDITIONS = ("on", "off")
STATUS_ICON_STRING = "images/{0}_{1}.png"
Run Code Online (Sandbox Code Playgroud)

python for-loop ordereddictionary typeerror dictionary-comprehension

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

编写python两级循环理解

我有一个包含以下行的输入文件:

key \t  value1  \t value2 ..... 
Run Code Online (Sandbox Code Playgroud)

我想把这个文件读入一个字典,其中key是该行的第一个标记,值是值列表.

我认为这样的事情会这样做,但python给我一个错误,名称l没有定义.如何编写具有两个级别的"for"语句的理解?

f = open("input.txt")
datamap = {tokens[0]:tokens[1:] for tokens in l.split("\t") for l in enumerate(f)}
Run Code Online (Sandbox Code Playgroud)

python list-comprehension dictionary-comprehension

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

使用键/元组对从字典中提取元组

我知道我很接近:

    for k in my_dictionary:
        #print (k, my_dict[k][0],my_dict[k][1])
        for v in my_dict[k]:
            print (v,my_dict[k])
Run Code Online (Sandbox Code Playgroud)

结果是:

tuple00('tuple00','tuple01')
tuple01('tuple00','tuple01')
tuple10('tuple10','tuple11')
tuple11('tuple10','tuple11')
Run Code Online (Sandbox Code Playgroud)

评论行会给我一个更好的结果

key0 tuple00 tuple01
key1 tuple00 tuple01
Run Code Online (Sandbox Code Playgroud)

但我必须通过以下方式解决这些问题:

my_dict[k][0],my_dict[k][1]
Run Code Online (Sandbox Code Playgroud)

这是丑陋的.这样做:

    for k in my_dict:
        for i,m in k:
            print (i,m,k)
Run Code Online (Sandbox Code Playgroud)

给出错误:

    for i,m in k:
ValueError: need more than 1 value to unpack
Run Code Online (Sandbox Code Playgroud)

我知道列表理解可能就是我所追求的,但我仍然无法开始理解.

我会通过循环(如上所述)或字典/列表理解来接受答案......

我真正想要的是能够选择一个Key值并使用元组作为引用对:im

python tuples list-comprehension python-3.x dictionary-comprehension

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

Dictionary Torehension生成内置类型的值

我想做一个词典理解来获得一个内置类型str为值的键列表.

headers = ['Header1', 'Header2', 'Header3']
print dict([(x,str) for x in headers])
Run Code Online (Sandbox Code Playgroud)

输出:

{'Header2': <type 'str'>, 'Header3': <type 'str'>, 'Header1': <type 'str'>}
Run Code Online (Sandbox Code Playgroud)

期望的输出:

{'Header2': str, 'Header3': str, 'Header1': str}
Run Code Online (Sandbox Code Playgroud)

python dictionary python-2.7 dictionary-comprehension

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

如何删除列表中的整个字典?

mylist = [{"a" : 1, " b" : 2}, {"c" : 1, "d" :2}]
Run Code Online (Sandbox Code Playgroud)

我的清单就是这样的.我如何删除包含密钥'a'的整个字典?

python dictionary list-comprehension dictionary-comprehension

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

Python 3.6:使用另一个作为索引的值创建新的dict

在Python 3.6.3中,我有以下dict D1:

D1 = {0: array([1, 2, 3], dtype=int64), 1: array([0,4], dtype=int64)}
Run Code Online (Sandbox Code Playgroud)

数组中的每个值都是另一个dict的键的索引D2:

D2 = {'Jack': 1, 'Mike': 2, 'Tim': 3, 'Paul': 4, 'Tommy': 5}
Run Code Online (Sandbox Code Playgroud)

我正在尝试D3使用相同的键创建第三个dict,D1并且作为值D2对应于索引的键D1.values().

我的目标是:

D3 = {0: ['Mike','Tim','Paul'], 1: ['Jack','Tommy']}
Run Code Online (Sandbox Code Playgroud)

我的方法是局部的,因为我很难弄清楚如何告诉D3从中获取密钥D1和来自的值D2.我对此不太确定and.有任何想法吗?

D3 = {key:list(D1.values())[v] for key in D1.keys() and v in D2[v]}
Run Code Online (Sandbox Code Playgroud)

python dictionary numpy dictionary-comprehension

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

如何使用dict理解条件替换键

我有一本字典

d={'user': 'bala', 'password': 'pass', 'filetype': 'as-parquetfile'}
Run Code Online (Sandbox Code Playgroud)

所有键都应加上前缀,--filetype应替换--

{'--user': 'bala', '--password': 'pass', '--': 'as-parquetfile'}
Run Code Online (Sandbox Code Playgroud)

如果我执行以下操作,则会收到语法错误。

{'--'+k:v if k!='filetype' else '--':v for (k,v) in d.items()}
Run Code Online (Sandbox Code Playgroud)

python dictionary-comprehension

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

将嵌套字典转换为元组列表

我有一个dictionary-

d={'revenues':
             {
              '201907':
                      {'aaa.csv':'fdwe34x2'},
              '201906':{'ddd.csv':'e4c5q'}
             },    
   'complaints':
             {'2014':
                    {'sfdwa.csv','c2c2jh'}
             }
  }
Run Code Online (Sandbox Code Playgroud)

我想把它转换listtuples-

[
 ('revenues','201907','aaa.csv','fdwe34x2'),
 ('revenues','201906','ddd.csv','e4c5q'),
 ('complaints','2014','sfdwa.csv','c2c2jh')
]
Run Code Online (Sandbox Code Playgroud)

我尝试使用list comprehensions,但没有帮助 -

l = [(k,[(p,q) for p,q in v.items()]) for k,v in d.items()]
print(l)
    [('revenues', [('201907', {'aaa.csv': 'fdwe34x2'}), ('201906', {'ddd.csv': 'e4c5q'})]),
     ('complaints', [('2014', {'c2c2jh', 'sfdwa.csv'})])]
Run Code Online (Sandbox Code Playgroud)

有什么建议么?

python tuples dictionary-comprehension

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

列表理解中的缓存变量

假设我有一个昂贵的操作expensive(x: int) -> int和以下列表理解:

# expensive(x: int) -> int
# check(x: int) -> bool
[expensive(i) for i in range(LARGE_NUMBER) if check(expensive(i))]
Run Code Online (Sandbox Code Playgroud)

如果我想避免expensive(i)为每个运行两次i,有什么方法可以通过列表理解来保存它的值?

python performance list-comprehension dictionary-comprehension set-comprehension

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