按其中一个值排序2个默认值

时间:2017-03-11 01:22:05

标签: python defaultdict

我有2个默认配置,其中我尝试使用其中一个defaultdict的值对结果进行排序,但我无法做到这一点。

我的代码正在运行,部分正确的方式正如我期望的那样,但是当我尝试按大小调整排序时,正如您在下面的item_B_v输出中所看到的那样(最后的那些大数字)方括号内的列)。 在该行中,我希望ias结果先放置yannix

| item_A_v(xxx) |    2 |    greggor [222122758 (1)], anise [8569153 (1)] |
| item_B_v(xxx) |   21 |     yannix [2309188 (1)], ias [2903105467 (20)] |
| item_C_v(xxx) |   11 |                         yannix [221837769 (11)] |

我的默认条件示例:

# Variable name - user_item_count
# Each users' versions
defaultdict(<function <lambda> at 0x44f09b0>,
    {'yannix': defaultdict(<type 'int'>, {'item_B_v': 1, 'item_C_v': 11}),
     'greggor': defaultdict(<type 'int'>, {'item_A_v': 1}),
     'anise': defaultdict(<type 'int'>, {'item_A_v': 1}),
     'ias': defaultdict(<type 'int'>, {'item_B_v': 20})})

# Variable name - item_size_dict
# Each items' sizes - version_size
defaultdict(<function <lambda> at 0x44f08c0>,
    {'yannix': defaultdict(<type 'int'>, {'item_B_v': 2309188, 'item_C_v': 221837769}),
     'greggor': defaultdict(<type 'int'>, {'item_A_v': 222122758}),
     'anise': defaultdict(<type 'int'>, {'item_A_v': 8569153}),
     'ias': defaultdict(<type 'int'>, {'item_B_v': 2903105467})})

这是我所做的生成上述输出的代码:

user_name_dict = defaultdict(set)
item_count = defaultdict(int)
user_item_count = defaultdict(lambda: defaultdict(int))
item_size_dict = defaultdict(lambda: defaultdict(int))

"""
{'item_B_v032': ('ias', 37525303), 'item_C_v008': ('yannix', 14916429),
 'item_C_v009': ('yannix', 14789268), 'item_C_v005': ('yannix', 51182813),
 'item_C_v006': ('yannix', 17509593), 'item_C_v007': ('yannix', 21022937),
 'item_B_v025': ('ias', 187150302), 'item_B_v024': ('ias', 187150302),
 'item_B_v027': ('ias', 187150302), 'item_B_v026': ('ias', 187150302),
 'item_B_v030': ('ias', 187150302), 'item_B_v020': ('ias', 187150302),
 'item_B_v023': ('ias', 187150302), 'item_B_v022': ('ias', 187150302), 
 'item_B_v005': ('yannix', 2309188), 'item_B_v029': ('ias', 187150302), 
 'item_B_v028': ('ias', 187150302), 'item_A_v003': ('anise', 8569153), 
 'item_A_v006': ('greggor', 222122758), 'item_B_v037': ('ias', 23504129), 
 'item_C_v017': ('yannix', 18353866), 'item_C_v011': ('yannix', 11118693), 
 'item_C_v010': ('yannix', 11118703), 'item_C_v020': ('yannix', 18353866), 
 'item_C_v021': ('yannix', 11118693), 'item_C_v022': ('yannix', 11118703),
 'item_B_v014': ('ias', 208622214), 'item_B_v015': ('ias', 208855972), 
 'item_B_v016': ('ias', 187150302), 'item_B_v017': ('ias', 187150302), 
 'item_B_v011': ('ias', 5490970), 'item_B_v012': ('ias', 13747673), 
 'item_B_v013': ('ias', 122030327), 'item_B_v033': ('ias', 37525255)}
"""

for item_name, item_user_tag in some_results.iteritems():
    strip_item = item_name[:-3]
    user_name_dict[strip_item].add(item_user_tag[0])
    item_count[strip_item] += 1
    user_item_count[item_user_tag[0]][strip_item] += 1
    item_size_dict[item_user_tag[0]][strip_item] += item_user_tag[1]


for new_item_name, new_item_count in sorted(item_count.iteritems()):
    users = ', '.join('{0} [{1} ({2})]'.format(
                    user,
                    item_size_dict[user][new_item_name],
                    user_item_count[user][new_item_name]
                    )
                for user in user_name_dict[new_item_name]
                )
    print "| {0} | {1} | {2} |".format(new_item_name,
                                       new_item_count,
                                       users)

看到两个dicts包含相同数量的项目,我是否可以将它们“压缩”在一起或某种类型并使用其中一个dict的值进行排序?

0 个答案:

没有答案