objdict: Implement construction from iterable of pairs.
Pairs are limited to tuples so far.
This commit is contained in:
parent
12a04392b9
commit
be019ce063
16
py/objdict.c
16
py/objdict.c
|
@ -7,6 +7,7 @@
|
|||
#include "mpconfig.h"
|
||||
#include "qstr.h"
|
||||
#include "obj.h"
|
||||
#include "objtuple.h"
|
||||
#include "runtime0.h"
|
||||
#include "runtime.h"
|
||||
|
||||
|
@ -39,13 +40,22 @@ STATIC mp_obj_t dict_make_new(mp_obj_t type_in, uint n_args, uint n_kw, const mp
|
|||
dict = mp_obj_new_dict(0);
|
||||
break;
|
||||
|
||||
case 1:
|
||||
case 1: {
|
||||
if (MP_OBJ_IS_TYPE(args[0], &mp_type_dict)) {
|
||||
return dict_copy(args[0]);
|
||||
}
|
||||
// TODO create dict from an arbitrary mapping!
|
||||
// TODO create dict from an iterable!
|
||||
assert(false);
|
||||
|
||||
// Make dict from iterable of pairs
|
||||
mp_obj_t iterable = mp_getiter(args[0]);
|
||||
mp_obj_t dict = mp_obj_new_dict(0);
|
||||
// TODO: support arbitrary seq as a pair
|
||||
mp_obj_tuple_t *item;
|
||||
while ((item = mp_iternext(iterable)) != MP_OBJ_NULL) {
|
||||
mp_obj_dict_store(dict, item->items[0], item->items[1]);
|
||||
}
|
||||
return dict;
|
||||
}
|
||||
|
||||
default:
|
||||
nlr_raise(mp_obj_new_exception_msg_varg(&mp_type_TypeError, "dict takes at most 1 argument"));
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
print(dict([(1, "foo")]))
|
||||
d = dict([("foo", "foo2"), ("bar", "baz")])
|
||||
print(sorted(d.keys()))
|
||||
print(sorted(d.values()))
|
Loading…
Reference in New Issue