编辑:原来答案是强调“不”。但是,我仍然在努力用适当数量的条目填充列表。
我一直在为此搜索StackOverflow,我一直看到动态设置变量名称不是一个好的解决方案。但是,我想不出另一种方法。
我有一个[
{rabbit,
{auth_backends, [{rabbit_auth_backend_ldap, rabbit_auth_backend_internal},
rabbit_auth_backend_internal]}
},
{rabbitmq_auth_backend_ldap,
[{servers, ["theserver.thedomain.com"]},
%% this works, but a password is still required
{user_dn_pattern, "CN=${username},OU=theADgroup,OU=anothergroup,DC=thedomain,DC=dom"},
%% looks like this is required
{other_bind, anon},
{use_ssl, false},
{port, 389},
{log, true}
]}
].
从DataFrame
创建(从excel读入),其中包含带有字符串标题和整数条目的列,以及一个包含数字的列(让我们称之为周)1到52顺序增加。我想要做的是创建单独的列表,每个列表以列标题命名,条目是出现所列整数的次数的周数。
对于几列来说这很简单,只需手动创建列表名称,但随着列数的增加,这可能会有点失控。
残暴的解释,这是我能想到的最好的。希望简化的例子能够澄清。
pandas
期望的输出:
week str1 str2 str3
1 8 2 5
2 1 0 3
3 2 1 1
到目前为止我所拥有的:
str1_count = [1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 3] # eight 1's, one 2, and two 3's
str2_count = [1, 1, 3] # two 1's, one 3
str3_count = [1, 1, 1, 1, 1, 2, 2, 2, 3] # five 1's, three 2's, one 3
答案 0 :(得分:1)
那么,像这样?
import collections
import csv
import io
reader = csv.DictReader(io.StringIO('''
week,str1,str2,str3
1,8,2,5
2,1,0,3
3,2,1,1
'''.strip()))
data = collections.defaultdict(list)
for row in reader:
for key in ('str1', 'str2', 'str3'):
data[key].extend([row['week']]*int(row[key]))
from pprint import pprint
pprint(dict(data))
# Output:
{'str1': ['1', '1', '1', '1', '1', '1', '1', '1', '2', '3', '3'],
'str2': ['1', '1', '3'],
'str3': ['1', '1', '1', '1', '1', '2', '2', '2', '3']}
注意:Pandas适合处理数据并对其进行一些有趣的操作,但如果你只是需要一些简单的东西,你就不需要它。这是其中一种情况。