我有嵌套在列表中的列表。这是我尝试使用列表的迷你预览来绘制单个嵌套列表的数量的代码:
(['a', 'b'], 2)
(['a', 'b'], 2)
(['c'], 2)
(['c'], 2)
(['d', 'e'], 1)
(['e'], 1)
我试图使输出成为仅包含不同嵌套列表及其计数的字典/列表,以便我可以按计数对结果进行排序。列表不使用两个值,因此我正在考虑将其设为字典以便更轻松地存储。 这些是我从上面的代码中得到的结果。
$myObj = new stdClass();
$myObj->requestTime = $reqtime;
$myObj->clients[] = ['id' => $id, 'name' => $name];
$myJSON = json_encode($myObj);
echo $myJSON;
我希望输出为每个不同的列表及其相应的计数仅提供一行(而不是如上面的当前输出所示,为同一列表提供多行)。有什么想法吗?
答案 0 :(得分:4)
您应该使用collections.Counter()
:
>>> count_list = [['a', 'b'],['d', 'e'], ['e'], ['c'], ['a', 'b'], ['c']]
>>> import collections
>>> result = collections.Counter(tuple(x) for x in count_list)
>>> print(result)
Counter({
('c',): 2,
('a', 'b'): 2,
('d', 'e'): 1,
('e',): 1
})
答案 1 :(得分:2)
即使TreeView
是python原生的,如果您不想使用任何库,也可以...
Counter
答案 2 :(得分:1)
如果可以将嵌套列表转换为元组,以便将它们用作键,则将结果作为dict(与如何解决此问题的最初想法相一致)也将非常简单。例如:
Completable.fromAction(new Action() {
@Override
public void run() throws Exception {
getRoomDatabase().clearAllTables();
}
}).subscribeOn(getSchedulerProvider().io())
.observeOn(getSchedulerProvider().ui())
.subscribe(new Action() {
@Override
public void run() throws Exception {
Log.d(TAG, "--- clearAllTables(): run() ---");
getInteractor().setUserAsLoggedOut();
getMvpView().openLoginActivity();
}
}, new Consumer<Throwable>() {
@Override
public void accept(Throwable throwable) throws Exception {
Log.d(TAG, "--- clearAllTables(): accept(Throwable throwable) ----");
Log.d(TAG, "throwable.getMessage(): "+throwable.getMessage());
}
});
答案 3 :(得分:1)
如果您转换为元组,则可以使用字典理解
count_list = [tuple(i) for i in count_list]
d = {i: count_list.count(i) for i in set(count_list)}
{('a', 'b'): 2, ('d', 'e'): 1, ('c',): 2, ('e',): 1}