Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 元组值字典的排序、计数和过滤_Python_Dictionary_Tuples - Fatal编程技术网

Python 元组值字典的排序、计数和过滤

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

我有一个迭代器,它给我版本命名、用户名和与之相关的大小。 在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"],
    "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

我尝试了几种使用更多词典的方法,但我要么让自己更加困惑,要么就是找不到“链接”,因为我想实现以下目标:

  • 将类似版本的名称整理为1
  • 在#1之前,任何与类似版本相关的用户名都将在其旁边输出
  • 在#2之前,它还将导出每个用户占用的总大小以及用户拥有的版本数
  • 到目前为止,我似乎能够做到所有的点,但我肯定错过了一些步骤,以实现这个“同一用户”的问题和排序的第三列按降序使用的大小


    我还有什么更好的方法来解决这个问题呢?

    您使用什么代码/工具来生成输出?无法对您没有向我们展示的代码进行有用的注释。您也没有提供您想要的示例输出;您已经描述了它,但实际粘贴您想要的内容是很有帮助的,这样就不会有失败的风险误解。@ShadowRanger我的错!忘了粘贴在这里,它已经被编辑过了