我有一个list的dict.需要将其转换list为namedtuple(首选)或简单,tuple同时用空格分割第一个变量.
什么是pythonic方式呢?
我简化了我的代码.欢迎使用理解,gen表达式和itertools.
数据在:
dl = [{'a': '1 2 3',
'd': '*',
'n': 'first'},
{'a': '4 5',
'd': '*', 'n':
'second'},
{'a': '6',
'd': '*',
'n': 'third'},
{'a': '7 8 9 10',
'd': '*',
'n': 'forth'}]
Run Code Online (Sandbox Code Playgroud)
简单的算法:
from collections import namedtuple
some = namedtuple('some', ['a', 'd', 'n'])
items = []
for m in dl:
a, d, n = m.values()
a = a.split()
items.append(some(a, d, n))
Run Code Online (Sandbox Code Playgroud)
输出:
[some(a=['1', '2', '3'], d='*', …Run Code Online (Sandbox Code Playgroud) 我有一个包含其键下的列表的dict:
dct = {'a': [1, 2, 3],
'b': [1, 2, 3, 4],
'c': [1, 2]}
Run Code Online (Sandbox Code Playgroud)
识别列表长度是否相同的最佳方法是什么?
这是我的解决方案:
import itertools
len(set(itertools.imap(len, dct.viewvalues()))) == 1
Run Code Online (Sandbox Code Playgroud)
True如果相似,False如果不相似
UPD:参考@RaymondHettinger建议替换map为itertools.imap
我有一个严格排序的字符串列表:
['a',
'b',
'b/c',
'b/d',
'e',
'f',
'f/g',
'f/h',
'f/h/i',
'f/h/i/j']
Run Code Online (Sandbox Code Playgroud)
此列表类似于树表示.所以,我需要将其转换为dict:
{'a': {},
'b': {'c': {},
'd': {}},
'e': {},
'f': {'g': {},
'h': {'i': {'j': {}}}}}
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,这个词典中的键是父母,价值观是孩子.
UPD:我同意空的dict比None更好
给出由空格分隔的一串单词.需要用逗号替换空格,忽略引号中的空格.
>>> some_string = 'one two "three four" five "six seven"'
>>> replace_func(some_string)
'one,two,"three four",five,"six seven"'
Run Code Online (Sandbox Code Playgroud)
这是一个简单的决定:
def replace_func(some_str):
lines = []
i = 1
for l in struct.split('"'):
if i % 2:
lines.append(l.replace(' ', ',')
else:
lines.append(l)
i += 1
parsed_struct = '"'.join(lines)
Run Code Online (Sandbox Code Playgroud)
有什么建议?
是否有机会使用以下方式加入我的类型:
str.join()
Run Code Online (Sandbox Code Playgroud)
我上课了:
class Slice(object):
def __init__(self, start, end):
self.__start = start
self.__end = end
def __str__(self):
return '{0}:{1}'.format(self.__start, self.__end)
def __repr__(self):
return "'{}'".format(str(self))
Run Code Online (Sandbox Code Playgroud)
我应该覆盖什么来执行这种代码:
','.join(Slice(1, 2), Slice(3, 4))
Run Code Online (Sandbox Code Playgroud)
得到这样的结果:
'1:2,3:4'
Run Code Online (Sandbox Code Playgroud)