出于好奇,有可能将以下逻辑写成一个不错的词典理解吗?
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)
有可能更优雅吗?
我有以下代码:
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
我有一个包含以下行的输入文件:
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) 我知道我很接近:
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值并使用元组作为引用对:i和m
python tuples list-comprehension python-3.x dictionary-comprehension
我想做一个词典理解来获得一个内置类型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) mylist = [{"a" : 1, " b" : 2}, {"c" : 1, "d" :2}]
Run Code Online (Sandbox Code Playgroud)
我的清单就是这样的.我如何删除包含密钥'a'的整个字典?
python dictionary list-comprehension dictionary-comprehension
在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) 我有一本字典
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) 我有一个dictionary-
d={'revenues':
{
'201907':
{'aaa.csv':'fdwe34x2'},
'201906':{'ddd.csv':'e4c5q'}
},
'complaints':
{'2014':
{'sfdwa.csv','c2c2jh'}
}
}
Run Code Online (Sandbox Code Playgroud)
我想把它转换list成tuples-
[
('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)
有什么建议么?
假设我有一个昂贵的操作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
python ×10
dictionary ×4
tuples ×2
for-loop ×1
numpy ×1
performance ×1
python-2.7 ×1
python-3.x ×1
typeerror ×1