mirror of
https://github.com/RustPython/RustPython.git
synced 2026-10-29 03:04:38 +08:00
Add dict.items
This commit is contained in:
1 parent
37118c7d75
commit
475476df71
2 files changed
+30
-4
No files matched your search
@@ -20,6 +20,12 @@ assert len(a) == 0
|
||||
|
||||
a = {'a': 5, 'b': 6}
|
||||
res = set()
|
||||
for num in a.values():
|
||||
res.add(num)
|
||||
for value in a.values():
|
||||
res.add(value)
|
||||
assert res == set([5,6])
|
||||
|
||||
count = 0
|
||||
for (key, value) in a.items():
|
||||
assert a[key] == value
|
||||
count += 1
|
||||
assert count == len(a)
|
||||
+22
-2
@@ -273,8 +273,7 @@ fn dict_values(vm: &mut VirtualMachine, args: PyFuncArgs) -> PyResult {
|
||||
|
||||
let values = get_elements(dict)
|
||||
.values()
|
||||
.map(|(_k, v)| v)
|
||||
.cloned()
|
||||
.map(|(_k, v)| v.clone())
|
||||
.collect();
|
||||
let values_list = vm.ctx.new_list(values);
|
||||
|
||||
@@ -289,6 +288,26 @@ fn dict_values(vm: &mut VirtualMachine, args: PyFuncArgs) -> PyResult {
|
||||
Ok(iter_obj)
|
||||
}
|
||||
|
||||
fn dict_items(vm: &mut VirtualMachine, args: PyFuncArgs) -> PyResult {
|
||||
arg_check!(vm, args, required = [(dict, Some(vm.ctx.dict_type()))]);
|
||||
|
||||
let items = get_elements(dict)
|
||||
.values()
|
||||
.map(|(k, v)| vm.ctx.new_tuple(vec![k.clone(), v.clone()]))
|
||||
.collect();
|
||||
let items_list = vm.ctx.new_list(items);
|
||||
|
||||
let iter_obj = PyObject::new(
|
||||
PyObjectPayload::Iterator {
|
||||
position: Cell::new(0),
|
||||
iterated_obj: items_list,
|
||||
},
|
||||
vm.ctx.iter_type(),
|
||||
);
|
||||
|
||||
Ok(iter_obj)
|
||||
}
|
||||
|
||||
fn dict_setitem(vm: &mut VirtualMachine, args: PyFuncArgs) -> PyResult {
|
||||
arg_check!(
|
||||
vm,
|
||||
@@ -367,4 +386,5 @@ pub fn init(context: &PyContext) {
|
||||
);
|
||||
context.set_attr(&dict_type, "clear", context.new_rustfunc(dict_clear));
|
||||
context.set_attr(&dict_type, "values", context.new_rustfunc(dict_values));
|
||||
context.set_attr(&dict_type, "items", context.new_rustfunc(dict_items));
|
||||
}
|
||||
Reference in new issue
Block a user