Python 元组值字典的排序、计数和过滤
我有一个迭代器,它给我版本命名、用户名和与之相关的大小。 在dict中将用户名和大小作为一个元组作为一个值时,我将其编入了字典Python 元组值字典的排序、计数和过滤,python,dictionary,tuples,Python,Dictionary,Tuples,我有一个迭代器,它给我版本命名、用户名和与之相关的大小。 在dict中将用户名和大小作为一个元组作为一个值时,我将其编入了字典 gen_dict = { "item_A_v004": ["jack", "1"], "item_A_v007": ["jack", "10"], "item_A_v009": ["jack", "1000"], "item_A_v008": ["jack", "100"], "item_B_v001": ["kay", "200
gen_dict = {
"item_A_v004": ["jack", "1"],
"item_A_v007": ["jack", "10"],
"item_A_v009": ["jack", "1000"],
"item_A_v008": ["jack", "100"],
"item_B_v001": ["kay", "200"],
"item_B_v003": ["peter", "2200"],
"item_B_v005": ["kay", "20"],
"item_C_v004": ["kay", "3"]
}
这是我得到的输出:
| item_A_v(xxx) | 4 | jack [1111 (4)] |
| item_B_v(xxx) | 3 | kay [223 (2)], peter [2200 (1)] |
| item_C_v(xxx) | 1 | kay [223 (1)] |
代码如下:
asset_user_dict = defaultdict(set)
asset_count = defaultdict(int)
user_ver_count = defaultdict(lambda: defaultdict(int))
asset_size_dict = {}
for vers_name, artist_alias in gen_dict.iteritems():
strip_version_name = vers_name[:-3]
asset_user_dict[strip_version_name].add(artist_alias[0])
asset_count[strip_version_name] += 1
user_ver_count[artist_alias[0]][strip_version_name] += 1
# This is my problem here...
# Seems to be summing up all the data found under 1 user
asset_size_dict.setdefault(artist_alias[0], []).append(artist_alias[1])
for version_name, version_count in sorted(asset_count.iteritems()):
users = ', '.join('{0} [{1} ({2}]'.format(alias, convert_size_query(sum(int(i) for i in asset_size_dict.get(alias))), user_ver_count[alias][version_name]) for alias in asset_user_dict[version_name])
#print users
print "| {0:<100} | {1:>12} | {2:>50} |".format(version_name+"(xxx)",
version_count,
users
)
asset\u user\u dict=defaultdict(设置)
资产计数=默认数字(整数)
user\u ver\u count=defaultdict(lambda:defaultdict(int))
资产大小dict={}
gen_dict.iteritems()中的艺术家别名:
条带版本名称=版本名称[:-3]
资产\用户\目录[strip\版本\名称].添加(艺术家\别名[0])
资产盘点[剥离版本名称]+=1
用户\u版本\u计数[艺术家\u别名[0]][strip\u版本\u名称]+=1
#这是我的问题。。。
#似乎是对1个用户下发现的所有数据进行汇总
资产大小目录设置默认值(艺术家别名[0],])。追加(艺术家别名[1])
对于版本名称,已排序的版本计数(asset\u count.iteritems()):
users=','.join('{0}[{1}({2}]')。格式(别名,convert_size_查询(sum(int(i)for i in asset_size_dict.get(alias)),user_ver_count[别名][版本名称])for alias in asset_user_dict[版本名称])
#打印用户
打印“|{0:12}{2:>50}|”,
版本(u)计数,,
使用者
)
看起来,如果我在不同版本之间有相同的用户名(请参见kay
),则会输出大小的总和。因此,在上面的示例中,我预计kay的Item_B为220,Item_C为3,但两者的结果都是223
我尝试了几种使用更多词典的方法,但我要么让自己更加困惑,要么就是找不到“链接”,因为我想实现以下目标:
我还有什么更好的方法来解决这个问题呢?您使用什么代码/工具来生成输出?无法对您没有向我们展示的代码进行有用的注释。您也没有提供您想要的示例输出;您已经描述了它,但实际粘贴您想要的内容是很有帮助的,这样就不会有失败的风险误解。@ShadowRanger我的错!忘了粘贴在这里,它已经被编辑过了